词汇范围的简要介绍是什么?
当前回答
词汇作用域意味着在嵌套的函数组中,内部函数可以访问其父作用域的变量和其他资源。
这意味着孩子的函数在词汇上与父母的执行上下文绑定。
词汇范围有时也称为静态范围。
function grandfather() {
var name = 'Hammad';
// 'likes' is not accessible here
function parent() {
// 'name' is accessible here
// 'likes' is not accessible here
function child() {
// Innermost level of the scope chain
// 'name' is also accessible here
var likes = 'Coding';
}
}
}
关于词法作用域,你会注意到它是向前的,这意味着可以通过其子级的执行上下文访问该名称。
但它不能向其父代反向工作,这意味着变量likes不能被其父代访问。
这还告诉我们,在不同的执行上下文中具有相同名称的变量从执行堆栈的顶部到底部获得优先级。
在最里面的函数(执行堆栈的最顶层上下文)中,名称与另一个变量类似的变量将具有更高的优先级。
来源
其他回答
词法作用域意味着函数从定义它们的作用域解析自由变量,而不是从它们被调用的作用域。
让我们尝试最短的定义:
词法作用域定义了如何在嵌套函数中解析变量名:即使父函数已返回,内部函数也包含父函数的作用域。
这就是它的全部!
词汇作用域意味着在嵌套的函数组中,内部函数可以访问其父作用域的变量和其他资源。
这意味着孩子的函数在词汇上与父母的执行上下文绑定。
词汇范围有时也称为静态范围。
function grandfather() {
var name = 'Hammad';
// 'likes' is not accessible here
function parent() {
// 'name' is accessible here
// 'likes' is not accessible here
function child() {
// Innermost level of the scope chain
// 'name' is also accessible here
var likes = 'Coding';
}
}
}
关于词法作用域,你会注意到它是向前的,这意味着可以通过其子级的执行上下文访问该名称。
但它不能向其父代反向工作,这意味着变量likes不能被其父代访问。
这还告诉我们,在不同的执行上下文中具有相同名称的变量从执行堆栈的顶部到底部获得优先级。
在最里面的函数(执行堆栈的最顶层上下文)中,名称与另一个变量类似的变量将具有更高的优先级。
来源
var scope = "I am global";
function whatismyscope(){
var scope = "I am just a local";
function func() {return scope;}
return func;
}
whatismyscope()()
上述代码将返回“我只是本地人”。它不会返回“我是一个全球人”。因为函数func()计算最初定义的位置,该位置在函数whatismyscope的范围内。
无论调用什么(全局范围/甚至来自另一个函数),它都不会麻烦,这就是为什么全局范围值“我是全局的”不会被打印出来的原因。
这被称为词法作用域,根据JavaScript定义指南,“函数使用定义时有效的作用域链执行”。
词汇范围是一个非常强大的概念。
在简单的语言中,词法作用域是在作用域外部定义的变量,或者更高的作用域在作用域内部自动可用,这意味着您不需要在那里传递它。
例子:
let str="JavaScript";
const myFun = () => {
console.log(str);
}
myFun();
//输出:JavaScript
推荐文章
- 在React Native中使用Fetch授权头
- 为什么我的球(物体)没有缩小/消失?
- 如何使用jQuery检测页面的滚动位置
- if(key in object)或者if(object. hasownproperty (key)
- 一元加/数字(x)和parseFloat(x)之间的区别是什么?
- angularjs中的compile函数和link函数有什么区别
- 删除绑定中添加的事件监听器
- 很好的初学者教程socket.io?
- HtmlSpecialChars在JavaScript中等价于什么?
- React: 'Redirect'没有从' React -router-dom'中导出
- 如何在React中使用钩子强制组件重新渲染?
- 我如何使用Jest模拟JavaScript的“窗口”对象?
- 我如何等待一个承诺完成之前返回一个函数的变量?
- 在JavaScript中根据键值查找和删除数组中的对象
- 使嵌套JavaScript对象平放/不平放的最快方法