为什么_DEFAULT const变量更新?

时间:2017-06-26 17:31:41

标签: javascript angularjs

我遇到的情况无法真正解释这是怎么回事。

我为演示制作了plunker

代码:

angular.module('test', []).controller('TestController', function($scope) {

/*
  DEFAULT CONST VARIABLE
*/
const _DEFAULT = {
  items: [],
  name: 'Test',
  selected: null
};

/*
  TEST_CASE SCOPE VARIABLE
*/
$scope.test_case = _DEFAULT;

console.log('ON INIT DEFAULT: ', _DEFAULT);

/*
  FUNCTION
*/
$scope.clicked = () => {
  // SET TEST_CASE.SELECTED = 1
  $scope.test_case.selected = 1;

  // SHOW UPDATED TEST_CASE AND _DEFAULT VARIABLE
  console.log($scope.test_case, _DEFAULT);
};

});

点击按钮(check demo)后,我们仅在$scope.test_case更改数据,因此如何 const变量_DEFAULT可能与{具有相同的数据} {1}}从未触及或更改$scope.test_case时?

那应该是不可能的,还是我错过了什么?

1 个答案:

答案 0 :(得分:1)

这是设计:

  

const声明创建对值的只读引用。它并不意味着它拥有的值是不可变的,只是不能重新赋值变量标识符。例如,在内容是对象的情况下,这意味着可以改变对象的内容(例如其参数)。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const

此上下文中的const关键字将阻止变量_DEFAULT被赋予新值,但不会阻止该变量的值发生变化。