0
var ag = (function(){
        function update(at){
            console.log('at::'+at);
        }
        return {hike:function(){update(2);}}
})();

在这种方法中,我可以通过引用(ag.hike();) 访问内部函数远足()。

var ag = (function(){
         function update(at){
            console.log('at::'+at);
         }
         return update(2);
})();

在上面的示例中,即使通过引用(ag.update(2) 或 ag.update()),我也无法访问相同的内部 update() 方法。

我读到我们无法读取 IIFE 的内部属性。但在第一种情况下,我能够访问,而在第二种情况下,我无法访问。

以上2个例子有什么区别?为什么这两种不同的行为?请解释一下。对不起我的英语不好。

4

2 回答 2

0

在下面的片段中:

var ag = (function(){
   function update(at){
      console.log('at::'+at);
   }
   return { hike: function(){ update(2); } }
})();

您正在返回一个对象,其属性hike具有其中update函数的引用。这hike是一个函数,因此是可调用的。

在第二个片段中:

var ag = (function(){
    function update(at){
       console.log('at::'+at);
    }
    return update(2);
})();

您正在返回 的结果,update(2)并且由于该update函数不返回任何内容,ag因此其值为undefined,这是不可调用的。

您可以尝试返回update引用,然后使用2.

var ag = (function(){
    function update(at){
       console.log('at::'+at);
    }
    return update;
})();
ag(2) // at::2
于 2017-10-30T06:08:56.790 回答
0

bind如果您想返回一个稍后调用的函数,其值at绑定为 2,请使用该函数;

 return update.bind(null, 2);

它返回一个可以像这样调用的函数

ag();// at::2

您的方法的问题在于,在执行此操作时,return update(2);您会立即调用update函数并返回函数返回的值updateundefined因为您没有在该函数中返回任何内容。

于 2017-10-30T06:05:27.313 回答