我可以在匿名作用域中更改Javascript闭包中引用的函数

时间:2015-10-08 04:34:10

标签: javascript scope

给出这个例子:

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()来反映这种变化吗?

1 个答案:

答案 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