在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1、作用域简单来说,作用域是指程序中定义变量的区域,它决定了当前执行代码对变量的访问权限 在ES5中,一般只有两种作用域类型:
说完概念,我们来看下面这段代码: var a = 100 function test(){ var b = a * 2 var a = 200 var c = a/2 console.log(b) console.log(c) } test() // 这里会打印出什么? 解析:
所以最终会打印出 NaN,100 在ES6中,新增了一种块级作用域 简单来说,花括号 // ES5 if(true) { var name = '南玖' } console.log(name) // 南玖 // ES6 if(true) { let age = 18 } console.log(age) // 这里会报错 2、作用域链当可执行代码内部访问变量时,会先查找当前作用域下有无该变量,有则立即返回,没有的话则会去父级作用域中查找...一直找到全局作用域。我们把这种作用域的嵌套机制称为 3、词法作用域
所谓的词法作用域就是在你写代码时将变量和作用域写在哪里来决定的,也就是词法作用域是静态的作用域,在你写代码时就决定了。函数作用域取决于它申明的位置,与实际调用的位置无关 MDN对闭包的定义: 一个函数和对其周围(词法环境)的引用捆绑在一起(或者说函数被引用包围),这样一个组合就是闭包( 也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。在 我们可以得出:
我们先来看段代码: var name = '前端南玖' function say() { console.log(name) } say() 解析: 在《Javascript权威指南》书中有这样一句话:严格来讲,所以 但这只是理论上的闭包,与我们平时使用的不太一样。上面这个例子只是一个简单的闭包。 ECMAScript对闭包的定义:
我们再看一段《JavaScript权威指南》上的代码: let scope = 'global scope' function checkscope(){ let scope = 'local scope' function f(){ return scope } return f } let s = checkscope() s() // 这里返回什么? 很多同学可能觉得是
作用的基本规则: 5、闭包的应用
6、闭包的缺陷
7、高频闭包面试题var arr = [] for(var i=0;i<3;i++){ arr[i] = function(){ console.log(i) } } arr[0]() // 3 arr[1]() // 3 arr[2]() // 3 // 这里在执行的时候i已经变成了3 // 使用闭包解决 var arr = [] for(var i=0;i<3;i++){ arr[i] = (function(i){ return function(){ console.log(i) } })(i) } arr[0]() // 0 arr[1]() // 1 arr[2]() // 2 到此这篇关于Javascript作用域与闭包详情的文章就介绍到这了,更多相关Javascript作用域与闭包内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论