标签: iife

为什么这个立即调用的方法返回窗口对象?

为什么立即调用的方法返回window对象this,

var o = {};  
o.foo = function () {  
    console.log(this);  
}(); //Window {…}
Run Code Online (Sandbox Code Playgroud)

但是当稍后执行时,该方法返回对象o(正如我在两种情况下都预期的那样)?

var o = {};
o.foo = function () {
    console.log(this);
}
o.foo(); //Object {foo: function}
Run Code Online (Sandbox Code Playgroud)

javascript iife

1
推荐指数
1
解决办法
119
查看次数

为什么一个!函数之前没有返回布尔值相反的值?

我正在阅读这个问题.我有点理解发生了什么,但我很困惑

!function foo() {
  console.log(true) ;
}()
Run Code Online (Sandbox Code Playgroud)

不回来false.

!function () {}()这也将返回与函数返回值相反的布尔值,在本例中为true,因为!undefined为true.如果您希望实际返回值是调用的结果,那么尝试这样做:

"也将返回布尔对面"让我觉得false应该返回.为什么不呢.alert(!true); //false

javascript iife

1
推荐指数
1
解决办法
1025
查看次数

自执行函数和IIFE的区别

We can have immediately invoking function in two ways. I am confused about what is the difference between the following

var foo = function(){
   return { };
}();
Run Code Online (Sandbox Code Playgroud)

and this :

var foo = (function(){
   return { };
}());
Run Code Online (Sandbox Code Playgroud)

javascript iife

1
推荐指数
1
解决办法
998
查看次数

从开发人员工具中访问IIFE变量

让我先说一下,我知道它不是以编程方式从外部访问IIFE的内部变量,除非它们已被全局范围访问.

例如:

(function() {
    var a = "Hello"; // a isn't accessible from the outer scope
)();

console.log(a); // a is undefined
Run Code Online (Sandbox Code Playgroud)

但:

(function() {
    var a = "Hello";
    global.a = a;
)();

console.log(a); // Displays "Hello"
Run Code Online (Sandbox Code Playgroud)

在某些情况下,IIFE可能会持续执行几秒钟,或者在整个页面浏览期间,通常是在用JavaScript编写的游戏中,IIFE将包含游戏循环.

因此,IIFE中声明的所有变量和函数必须存在于浏览器内存中,但由于封装,它们无法从开发人员控制台显示.

我的问题是:有没有什么方法可以显示或操作它们,而不是先前修改代码,而它正在运行?由于这些变量存在于内存中并被使用?也许是通过某种调试?

我的问题主要针对Firefox和Chrome(Firebug和开发人员工具),但如果有一般方法可以使用它.

javascript developer-tools iife

1
推荐指数
1
解决办法
340
查看次数

对象的值未定义

我正在学习JavaScript.我已经尝试了下面的代码,我发现一个对象的值是未定义的.我希望最后一个控制台语句打印对象v中的所有值.我的期望是这个语句v.sampleFunction()将返回"给定的字符串是样本字符串样本字符串".而且我认为我可以使用v.values打印相同的内容.请告诉我我在做错的地方.

var r;
var v = new Object();

(function() {
    // function 1
    function s(sampelString) {
        var t = "The given String is "+sampelString;
	return (t);
    }
    r = s("Sample Text");
    
    // Adding SampleFunction to v
    v.samepleFuntion = function() {
        s("Sample String Sample String");
    }
})();
v.samepleFuntion();
console.log("The values in r==="+r);
console.log("The values in v==="+v.values);
Run Code Online (Sandbox Code Playgroud)

javascript object undefined iife

1
推荐指数
1
解决办法
74
查看次数

立即调用函数表达式导致错误?

有人可以解释为什么会这样吗?

如果我在一个名为的文件中写这样的东西test.js,

const anyObject = {}
(function(){ 
  console.log('hello world!') 
}())
Run Code Online (Sandbox Code Playgroud)

通过控制台运行它 $node test.js

然后在控制台中,hello world!将打印一个,但接下来是: TypeError: (intermediate value) is not a function

我不知道究竟发生了什么,我想某种节点是将函数表达式作为函数调用表达式?

我正在使用节点 v6.9.1

javascript node.js iife

1
推荐指数
1
解决办法
152
查看次数

为什么"this"内部函数定义并传递给IIFE引用函数本身?

免责声明:我已经被警告过,这个问题可能会被低估.如果你没有,我会很感激 - 我在Javascript课程中询问了我的老师的解释,他不知道所以我想我会在这里问...

我正试图绕过头this,一直在读Kyle Simpson,但遇到了一个我不明白的案例.

据我所知,当你在另一个函数中调用一个函数时,如果该函数被称为"独立"(参见Simpson这里:你不知道JS:这个和对象原型)那么this应该是Window(或者undefined如果它处于strict模式中)

var fn = function globo () { console.log(this);};

function calling(called) {

console.log(called());

}
calling(fn); // "Window" or "undefined"
Run Code Online (Sandbox Code Playgroud)

但如果你将类似的功能传递给IIFE,你会得到一个好奇的结果

 function calling(called) {

    console.log(called());

    }(function globo () { console.log(this);}); // [Function: globo]
Run Code Online (Sandbox Code Playgroud)

这似乎是一种罕见的情况,它this引用了被调用的函数,而不是"调用者"或它定义的默认情况.

知道这里发生了什么吗?

javascript this iife

1
推荐指数
1
解决办法
55
查看次数

为什么我们需要用()包装IIFE

当我们使用独立的函数语句作为IIFE时,我们需要对其进行包装()以使其起作用

// IFFE
(function a(){
    console.log('Hello')
}());

// IFFE
(function a(){
    console.log('Hello')
})()
Run Code Online (Sandbox Code Playgroud)

如果我们不包装()代码,则会产生语法错误

function a(){
    console.log('Hello')
}()
Run Code Online (Sandbox Code Playgroud)

但是,当我们将其用作函数表达式时,不需要用 ()

let a = function a(){
    console.log('Hello')
}()
Run Code Online (Sandbox Code Playgroud)

那么,为什么()要在将其用作函数语句时需要包装它呢?

javascript function iife

1
推荐指数
1
解决办法
43
查看次数

异步 IIFE 后变量未定义

  let groupedWishlistProducts;

  (async function () {
      groupedWishlistProducts = await fetchGroupedWishlistProducts();
      console.log(groupedWishlistProducts); // logs returned value properly
  })();

  console.log(groupedWishlistProducts); // logs undefined
Run Code Online (Sandbox Code Playgroud)

为什么groupedWishlistProducts在全局范围内未定义,即使我已经在全局范围内初始化?

javascript async-await iife

1
推荐指数
1
解决办法
73
查看次数

IIFE内部的调用函数

let f = function(x) {
  alert(x)
}

(function() {
  f(1)
}())
Run Code Online (Sandbox Code Playgroud)

为什么这段代码会抛出错误?起初,我认为问题与 IIFE 的语法不正确有关,但后来我了解到这种语法也很合适

javascript iife

1
推荐指数
1
解决办法
30
查看次数