In preparing for 70-480 Microsoft exam, I need help understanding why an a?swer is Correct
使用下面的代码,customer.name是未定义的。 有人可以帮我理解为什么以及代码发生了什么?
1 2 3 4 5 6 7 8 9 10 11 12 | var customer = function () { var name ="Contoso"; return { getName: function () { return name; }, setName: function (newName) { name = newName; } }; }(); alert (customer.name); |
这几乎是一个经典的JS模块模式 - 一个立即调用的函数表达式(IIFE),它返回一个对象,但也允许变量隐私。
我说几乎是因为模块模式通常看起来像这样。
1 2 3 | var customer = (function () { // })(); |
以下行将字符串作为局部变量范围并将其应用于
1 | var name ="Contoso"; |
因为函数立即被调用,所以返回此对象并将其应用于
1 2 3 4 | return { getName: function () { return name; }, setName: function (newName) { name = newName; } }; |
但是,因为
要获取名称,请在返回的对象
要设置新名称,请使用其他方法
DEMO
这两个方法都可以访问私有变量
变量customer未定义,因为它超出了函数的范围,在
当调用
1 2 3 4 5 6 7 8 9 10 | function () { var name ="Contoso"; return { getName: function () { return name; }, setName: function (newName) { name = newName; } }; |
此函数中的变量
所以在函数内部,我们可以说
我们可以在函数中使用this.name声明
1 | alert( customer.getName() ); |