繁体   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