Javascript 为什么angular使用闭包来定义指令和其他核心语法?
写这篇文章有什么好处:Javascript 为什么angular使用闭包来定义指令和其他核心语法?,javascript,angularjs,Javascript,Angularjs,写这篇文章有什么好处: app.directive("drink", function () { return { scope: { flavor: "=" }, template: '<div>{{ flavor }}</div>' }; }); app.指令(“饮料”,函数(){ 返回{ 范围:{ 味道:“=” }, 模板:“{flavor}}” }; }); 而不是: app.directive("drink", {
app.directive("drink", function () {
return {
scope: {
flavor: "="
},
template: '<div>{{ flavor }}</div>'
};
});
app.指令(“饮料”,函数(){
返回{
范围:{
味道:“=”
},
模板:“{flavor}}”
};
});
而不是:
app.directive("drink", {
scope: {
flavor: "="
},
template: '<div>{{ flavor }}</div>'
}};
app.directive(“饮料”{
范围:{
味道:“=”
},
模板:“{flavor}}”
}};
这种语法在angular中被广泛使用。其原因是什么
编辑:从第一个示例开始,angular可以控制创建配置对象的时间,因此可以选择oportune时间。它还允许以以下形式进行依赖项注入:
app.directive("drink", ['drinkStoreService', function (drinkStoreService) {
return {
scope: {
flavor: "="
},
template: '<div>{{ flavor }}</div>',
link: function () {
// could use `drinkStoreService` here
}
};
}]);
app.directive(“drink”、['drinkStoreService',函数(drinkStoreService){
返回{
范围:{
味道:“=”
},
模板:“{flavor}}”,
链接:函数(){
//可以在这里使用'drinkStoreService'
}
};
}]);
第二个示例没有上述功能。因此可用性要低得多。此外,由于对象文字将“当场创建/执行”,它甚至可能对程序流有害。还请注意,通过返回函数,您还可以执行以下操作:
return function()
{
var privateVar = mysteriousDataSource(); //Without having this executed instantly
return {
scope: {
flavor: "=",
mysteriousData : privateVar
},
template: '<div>{{ flavor }}</div>'
};
}
返回函数()
{
var privateVar=MystiousDataSource();//而不立即执行此操作
返回{
范围:{
味道:“=”,
神秘数据:privateVar
},
模板:“{flavor}}”
};
}
您的第二个代码段是无效的JavaScript(SyntaxError:expected expression,Get',')).scope:
被解释为标签,但是template:
不能,因为两者之间有逗号。因此,在Javascript中,每个作用域只能有一个标签?可以有几个,但是在template:
之前应该有一个分号,而不是逗号,并且表达式仍然不会产生对象文字(这似乎就是你要找的)。有趣。一个函数在执行时返回一个对象文本。另一个?另一个看到三个标签和两个语句块,计算两个字符串并返回未定义的
。这都是语法问题,解析器在第二个代码段中从未看到对象文本。谢谢!你在帮我填写这些内容我的…“但是为什么?”,用尖角的:)提问