给出这个例子:
var x = function() { return(0); };
var y = function() { return(x()); };
在控制台中调用y()将返回0.在此范围内更改x()将更改y()返回的值。这是可能的,因为我可以直接访问y()的范围。但是,如果y()是在匿名作用域中定义的,但是我可以访问它,但是没有直接访问x(),我可以将x()更改为:
var x = function() { return(1); };
因此调用y()会将此更改反映为x()?
换句话说,只能访问y(),我可以抓住它的范围并更改x(),以便调用y()来反映这种变化吗?
答案 0 :(得分:3)
不,那是不可能的。在下面的示例中,无法从闭包外部更改x
引用的y
。闭包将关闭它自己的范围以及它的父范围。
var y = (function () {
return function y() { return x(); };
function x() { return 0; }
})();
//There's no way to modify x from here