如果我可以声明JS const,为什么要使用AngularJs .constant()?

时间:2017-03-25 22:13:51

标签: javascript angularjs const

我正在开发一个AngularJS项目,其中有一个.constant()提供程序,用于声明整个项目中使用的一些基本信息。例如,cookie名称的定义。例:

.constant('appConst', { 
    cookie: 'CookieName',
    ...
});

但同样的事情可以通过声明const,例如:

来完成
const appConst = {
    cookie: 'CookieName',
    ...
}

那么,使用.constant提供商而不仅仅是声明const的优势是什么?我知道其中一个原因是因为我们不期望价值会发生变化。但这不是const的目标吗?

2 个答案:

答案 0 :(得分:1)

1- const是ES6中的新功能,因此您可能需要转发代码以支持旧浏览器。

2- const是块范围的,所以在一个场景中,您在A.js中定义一个常量,除非您使用的是B.js,否则无法在inject使用它模块捆绑器,所以我们回到主题 1 -

AngularJS具有此原生的主要目的是使您能够使用其依赖注入系统在控制器,服务和指令之间共享它。

答案 1 :(得分:1)

新的const关键字只会使您无法重新分配变量,它不会使您最初分配给它的任何对象不可变。所以在你的例子中:

const appConst = {
    cookie: 'CookieName',
    ...
}

您仍然可以更改cookie的值。你不会被允许做这样的事情:

appConst = { // My new object };

角度.constant()中的值仍然可以更改,因此它们在常量使用单词"常量"时不会保持不变。至少在您使用它时不会这样:

.constant('appConst', { 
    cookie: 'CookieName',
    ...
});

因此,例如,如果您这样做并更改控制器中的值

app.controller('myController', function(appConst){
    appConst.cookie = 'NewCookieName';
})

在构建此控制器后,您将在注入appConst的任何位置反映更改。

你不能重新分配"但是在这种情况下appConst,这个动作只会被忽略,所以在这个意义上它是不变的。