Javascript 角度控制器内部的闭合

Javascript 角度控制器内部的闭合,javascript,angularjs,Javascript,Angularjs,伙计们 我正在学习AngularJS,我想知道为什么控制器中的函数不能像clojure一样工作。下面是闭包工作原理的经典示例 var inner; var outer = function(x) { inner = function() { console.log(x); } } outer(3); inner(); 因此,我期望这段代码有类似的行为 angular.module('MyModule') .value('x', 3) .controller

伙计们

我正在学习AngularJS,我想知道为什么控制器中的函数不能像clojure一样工作。下面是闭包工作原理的经典示例

var inner;

var outer = function(x) {
    inner = function() {
        console.log(x);
    }
}

outer(3);

inner();
因此,我期望这段代码有类似的行为

angular.module('MyModule')
.value('x', 3)
.controller('MyCtrl', function($scope, x) {
        $scope.showMeX = function() {
           alert(x);
        }
    }
});
但是,无法从“showMeX”函数内部访问注入变量“x”。为什么不呢

我可以猜Angular提供对$scope对象的访问只是为了避免弄乱$scope外部的一些对象,并且这种逻辑应该是“不可见”的。不过,目前我还不明白这是怎么回事


有什么想法吗?链接到一些需要阅读的澄清材料将是完美的。

这可能是一种错觉。JavaScript闭包就是为此而设计的,对于上面发布的代码,
x
将永远不会出现
ReferenceError
。这并不意味着
x
不能是
未定义的

这可能是一种错觉。JavaScript闭包就是为此而设计的,对于上面发布的代码,
x
将永远不会出现
ReferenceError
。这并不意味着
x
不能
未定义

似乎工作正常。你有错误吗?哦,糟糕,我从我的代码中复制粘贴了它,一点也没有尝试。感谢您的回复,这确实有效,一切都如预期的那样进行。我是否应该现在删除我的问题,保留它是没有意义的,对吗?好吧,你可以发布一个答案来解释发生了什么,犯一些错误是可以的,只要你最后做对了。:)看起来很好用。你有错误吗?哦,糟糕,我从我的代码中复制粘贴了它,一点也没有尝试。感谢您的回复,这确实有效,一切都如预期的那样进行。我是否应该现在删除我的问题,保留它是没有意义的,对吗?好吧,你可以发布一个答案来解释发生了什么,犯一些错误是可以的,只要你最后做对了。:)是的,@pablochan告诉我真相:)下次我会小心的。就从道德的角度来说。。。我应该把你的答案标记为正确,还是应该自己回答并说我错了?随你怎么做,我的答案至少没有坏处,但它没有具体描述你错在哪里。我建议你自己回答是的,@pablochan告诉我真相:)下次我会小心的。就从道德的角度来说。。。我应该把你的答案标记为正确,还是应该自己回答并说我错了?随你怎么做,我的答案至少没有坏处,但它没有具体描述你错在哪里。我建议你自己回答