[英]IIFE and Global scope in javascript
為什么下面的代碼導致a
仍未undefined
時記錄b
?
(function(){ var a=b=5; })();
console.log('b:'+b);
console.log('a:'+a);
因為var a=b=5;
聲明中只定義了當地a
變量,其實這樣解釋
var a = (b=5);
等於
b = 5;
var a = 5;
將5
分配給全局b
變量並定義局部a
變量。
定義2個沒有值重復的局部變量的正確方法是
var b = 5, a = b;
在JavaScript中,如果您在變量前省略var關鍵字,它將被視為全局變量。 因此,這里b是全局變量,而a只是該函數作用域的局部變量。 這就是為什么訪問a時出現錯誤的原因。
可以通過兩種方式定義變量:
第一種方式, a
是局部變量,第二種方式,它成為全局變量。
因此,當您執行var a=b=5
, b
是全局變量,因此保留值。
沒關系,我自己弄清楚了,因為它不會讓我睡覺。
IIFE中發生了2個任務,而只有1個聲明。
語句var a=b=5;
用var
聲明變量a
,但是簡單地為另一個變量b
賦值。 實際上, b
從來沒有在這里聲明,而只是被賦值-使其成為全局變量 。
因此,函數外部的log語句可以訪問b
,該語句將其值打印為5
。
換句話說,在“嚴格”模式下,代碼將如下所示:
(function() {
'use strict';
var a = window.b = 5;
})();
console.log(b);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.