Javascript 这个有角度的JS代码段是如何工作的?
为什么以下代码段在Angular JS中工作Javascript 这个有角度的JS代码段是如何工作的?,javascript,angularjs,debugging,hoisting,Javascript,Angularjs,Debugging,Hoisting,为什么以下代码段在Angular JS中工作 var app = angular.module('store',[]); (function(){ app.controller('StoreController',function(){ this.blabla = student; }); })(); var student = { name:"Abc Def", rollNumber:12, isBrilliant: true
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
变量被分配一个对象
然而,该控制器函数是student
变量的闭包-换句话说,它在运行时可以访问它。因此,当它最终执行时,student
变量被定义
相比之下,第二个示例的
console.log
,无论是否包含在立即调用的函数表达式中,都在分配student
变量之前执行,因此它是未定义的第一个示例和第二个示例之间存在细微差别。在第一个示例中,有两个功能块,在第二个示例中,只有一个功能块
这两个示例都会立即调用,但如果第二个函数立即尝试访问尚未定义的外部变量,则第一个函数仅执行一个函数来注册控制器(因此,不执行控制器函数的内容)
当angular框架调用控制器的构造函数时,外部变量已经定义,并且是闭包环境的一部分。this.blablabla=student代码>在Angular实例化控制器之前不会执行,这将在您定义student之后发生。这是因为Angular使用摘要循环并不断更新$scope和其他的值。。。。因此,它重复检查并更新$scope,并使用更新的valuesCheckout文章更新第二点。这不是因为它是一个全局变量,而是因为它是函数闭包中的一个变量。是的,我会尝试清理一下。