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

标签 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() 会将这一更改反射(reflect)到 x() 吗?

换句话说,如果只访问 y(),我可以获取它的范围并更改 x() 以便调用 y() 反射(reflect)该更改吗?

最佳答案

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

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

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

关于javascript - 我可以在匿名范围内更改 Javascript 闭包中引用的函数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33006700/

相关文章:

javascript - 我的 Accordion 菜单代码有问题吗?

javascript - 谷歌控制台 Node 中的站点地图 xml

css - 如何使 Visual Studio 停止 "compiling".js 和 .css 文件

javascript - 输入字段(ng-modal)完成后的事件($watch)

javascript - Ruby 作用域,从函数返回 Proc

php - 使用 JavaScript 在 HTML 表中动态添加行并通过提交按钮获取每个文本框的文本框值

ruby - 本地范围到底是什么?

c++ - “回复”未在此范围内声明 C++

javascript - 获取给定 JavaScript 范围内的解析函数

javascript - JQuery - 使用插件删除一行内容进行确认