簡體   English   中英

這個Angular JS代碼片段如何工作?

[英]How does this Angular JS code snippet work?

為什么以下代碼片段在Angular JS中有效?

var app = angular.module('store',[]); 



(function(){
    app.controller('StoreController',function(){
        this.blabla = student;
    });
})();

var student = 
{
    name:"Abc Def",
    rollNumber:12,
    isBrilliant: true,
    isMale:false,
    isFemale: false,
    istest:true
};

即使student在使用它的功能之后並且student沒有被吊起,為什么上述功能仍然有效?

但與上面的例子相比,這個:

(function(){
        console.log("Name is :"+student);
    })();

    var student = {
        name:"xyz"
    };

student視為undefined意味着student undefined被提升。

.controller注冊一個控制器函數,但不立即執行它 - 它將它排入以后的階段。 然后,為student變量分配一個對象。

但是,該控制器函數是對student變量的封閉 - 換句話說,它可以在運行時訪問它。 閱讀更多關於閉包的信息 因此,當它最終執行時,定義了student變量。

相比之下,第二個示例的console.log ,無論是否包含在立即調用的函數表達式中,都分配student變量之前執行,因此undefined

第一個示例和第二個示例之間存在細微差別。 在第一個例子中,有兩個功能塊,在第二個例子中,只有一個。

這兩個示例都是立即調用的,但是第二個函數立即嘗試訪問尚未定義的外部變量,第一個只執行一個函數來注冊控制器(因此,不執行控制器函數的內容) )。

當角度框架調用控制器的構造函數時,外部變量已被定義,並且是閉包環境的一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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