JavaScript 词法作用域函数声明与定义

标签 javascript

<分区>

如果一个函数在全局范围内声明,但在局部范围内定义,它属于哪个范围?我问是因为我知道它可以访问局部函数的作用域(定义它的地方),但声明让我感到困惑。

例子:

var funcDef;
function a() {
    var msg = "Hello, world!";
    funcDef = function() {
        return msg;
    }
}
a();
console.log(funcDef()); // prints Hello, world!

我的理解是变量,funcDef本身是绑定(bind)在全局范围内的,它的函数声明还是绑定(bind)在a()的范围内。有人可以确认吗?

最佳答案

忘记这是一个函数这一事实,将其视为一个变量。假设您更改函数 a(请下次选择更好的名称)以将字符串值分配给 funcDef。

console.log(funcDef); 会在执行 a() 之前打印 undefined ,之后会打印字符串值。

这是类似的,funcDef 的值在执行 a() 之前是未定义的,之后它有一个分配给它的函数。

当然,以上是对实际情况的简化,但您可以这样想。实际上,由于关闭,msg 将在 a() 返回后保持存在。

阅读本文了解更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

关于JavaScript 词法作用域函数声明与定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25829390/

相关文章:

javascript - Bootstrap carousel 滑动时滑动高度变化bug

php - 向程序员寻求帮助

javascript - Cordova:UWP 应用程序上的 'Windows is undefined'

javascript - underscore.js 和 backbone.js 的外部 html 模板

javascript - 具有远程验证的 jQuery 不等待服务器的回答

javascript - 关于图表上的线条范围的 Highcharts 设计问题

javascript - 在 JavaScript/jQuery 回调中用 'this' 更改点击元素的文本

javascript - 递归地从对象数组中选择一个字段

javascript - 覆盖或更改 package.json "homepage"值

javascript - 使用条件语句将数组元素分配给另一个数组元素