我有一个名为“app”的模块,我在其中定义了一个常量“PI”,稍后在我的控制器中,当我试图更改常量的值时,它会被更改。
我无法理解AngularJS中常量的目的。
var app = angular.module('app', []);
app.constant('PI', 3.14159265359);
app.controller('appCtrl', function(PI) {
var radius = 4;
PI=2;
// calculate area of the circle
console.log(PI);
var area = PI * radius * radius;
});
答案 0 :(得分:3)
您实际上并未更改常量的值。您正在更改通过依赖注入参数引入的词法绑定变量的值。
使用Javascript const
关键字查看以下示例。
const PI = 3.14;
function area(pi, radius) {
pi = 2;
console.log('pi', pi);
console.log('PI', PI);
return pi * Math.pow(radius, 2);
}
显然pi
将被记录为2
,但我们还没有违反PI
的常量性质,我们只是更改了{{1}的绑定}。
调用函数时,它会在范围中引入新变量,每个参数对应一个变量。您无法控制这些变量的绑定 - 与常规变量不同,常规变量可以与pi
,let
和var
一起引入。
如果您将常量注入另一个模块,您将看到该值未被更改。
如果你想保证变量不能在引入它的函数范围内反弹,你可以用const
重新引入变量。
const
Angular应用程序中app.controller('appCtrl', function(PI) {
var radius = 4;
const pi = PI;
pi = 2;
// calculate area of the circle
console.log(pi);
var area = PI * radius * radius;
});
的目的是保证注入的值无论何时何地注入它都是相同的。
答案 1 :(得分:0)
虽然不改变constant
的值是一个好习惯,但值可以改变。请参阅here。
答案 2 :(得分:0)
您更改常量运行时的值,因此它将在结果处返回新值。
实现是不要改变常量变量。