Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么angular使用闭包来定义指令和其他核心语法?_Javascript_Angularjs - Fatal编程技术网

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:
之前应该有一个分号,而不是逗号,并且表达式仍然不会产生对象文字(这似乎就是你要找的)。有趣。一个函数在执行时返回一个对象文本。另一个?另一个看到三个标签和两个语句块,计算两个字符串并返回
未定义的
。这都是语法问题,解析器在第二个代码段中从未看到对象文本。谢谢!你在帮我填写这些内容我的…“但是为什么?”,用尖角的:)提问