我可以在匿名范围内更改Javascript闭包中引用的函数吗

我可以在匿名范围内更改Javascript闭包中引用的函数吗,javascript,scope,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()的更改 换句话

举个例子:

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()将反映该更改?

不,这是不可能的。在下面的示例中,无法从闭包外部更改
x
所指的
y
。闭包将在它自己的作用域以及它的父作用域上关闭

var y = (function () {
    return function y() { return x(); };
    function x() { return 0; }
})();

//There's no way to modify x from here