簡體   English   中英

JavaScript中的IIFE和全局范圍

[英]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時出現錯誤的原因。

可以通過兩種方式定義變量:

  • var a = 5 //首先
  • a = 5 //秒

第一種方式, a是局部變量,第二種方式,它成為全局變量。

因此,當您執行var a=b=5b是全局變量,因此保留值。

沒關系,我自己弄清楚了,因為它不會讓我睡覺。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM