今天就跟大家聊聊有关JavaScript中怎么实现函数本身的作用域,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
函数本身也是一个值,也有自己的作用域。它的作用域与变量一样,就是其声明时所在的作用域,与其运行时所在作用域无关。
var a = 1 var x = function() { console.log(a) } function f() { var a = 2 x() } f()
上面代码中,函数x是在函数f的外部声明的,所以它的作用域绑定外层,内部变量a不会到函数f体内取值,所以输出1,而不是2。
总之,函数执行时所在的作用域,是定义时的作用域,而不是调用时所在的作用域
var x = function () { console.log(a); }; function y(f) { var a = 2; f(); } y(x) // ReferenceError: a is not defined
上面代码将函数x作为参数,传入函数y。但是x是在函数y体外声明的,作用域绑定外层,因此找不到函数y的内部变量a,导致报错。
同样的函数本内部声明的函数,作用域绑定在函数体内部
function foo() { var x = 1; function bar () { console.log(x) } return bar } var x = 2 var f = foo() f() // 1
箭头函数的作用域,是和父级上下文绑定在一起的
var obj = { id: 1, show: () => { console.log(this.id) } } obj.show() // undefined
上面代码show函数是一个箭头函数,其this指向父级,而父级是一个顶级对象,window,window.id没有定义,所以返回undefined
var obj = { id: 2, show: function() { return () => { console.log(this.id) } } } obj.show()() // 2
看完上述内容,你们对JavaScript中怎么实现函数本身的作用域有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。