javascript - 在准备 70-480 Microsoft 考试时,我需要帮助理解为什么答案是正确的

标签 javascript html

使用下面的代码,customer.name 未定义。有人可以帮助我理解代码的原因和情况吗?

    var customer = function () {
     var name = "Contoso";
     return {
          getName: function () {
                return name;
          },
          setName: function (newName) {
                name = newName;
          }
     };
}();
alert (customer.name);

最佳答案

这几乎是a classic JS module pattern -an immediately-invoked function expression (IIFE)它返回一个对象,但也允许可变隐私。

我说几乎是因为模块模式通常看起来像这样。

var customer = (function () {
  //
})();

下面的行将字符串范围限定为局部变量并将其应用于 name。由于其范围的原因,无法在 IIFE 之外访问它。

var name = "Contoso";

因为该函数是立即调用的,所以它返回该对象并将其应用于客户。一种方法返回 name 的值,另一种方法则更新它。

return {
  getName: function () { return name; },
  setName: function (newName) { name = newName; }
};

但是,由于 name 对于 IIFE(模块)来说是“私有(private)”的,因此 customer.name 返回 undefined

要获取名称,请使用返回对象 customer.getName() 上的方法。

要设置新名称,请使用其他方法customer.setName('Bob')

DEMO

这两个方法都可以访问私有(private)变量namedue to a very important concept know as function closure由此,函数可以保留(“关闭”)其外部词法环境 - 在这种情况下很有用,以及诸如事件监听器之类的东西。

关于javascript - 在准备 70-480 Microsoft 考试时,我需要帮助理解为什么答案是正确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36538013/

相关文章:

javascript - 即使应该进入循环也不进入循环

javascript - jquery 在鼠标单击时选择了太多元素

javascript - 移动设备上的 HTML5 base64 编码音频

html - Css 媒体查询解决问题

html - 从 iOS Swift 中的摄像头扫描仪 SDK 返回时,WKwebview 是空白屏幕吗?

javascript - 我是否始终需要应用函数(匿名或其他方式)来为事件处理程序传递 JavaScript 参数?

javascript - 字符串中的 HTML 标签破坏了 javascript/jquery

javascript - D3 工具提示不跟随鼠标

javascript - 尝试制作轮播动画 slider

javascript - 我很好奇python是如何连接到网站的