美文网首页
函数的作用域是什么

函数的作用域是什么

作者: 玄天雪海 | 来源:发表于2018-09-13 09:21 被阅读0次

    函数作用域的含义是指,属于这个函数的全部变量都可以在整个函数的范围内使用及复用(事实上在嵌套的作用域中也可以使用)。这种设计方案是非常有用的,能充分利用 JavaScript 变量可以根据需要改变值类型的“动态”特性。

    变量的作用域无非就是两种:全局变量和局部变量。 

    全局作用域: 

    最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的:

    局部作用域: 

    和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,而对于函数外部是无法访问的,最常见的例如函数内部

    作用域链(Scope Chain)

    那什么是作用域链? 

    我的理解就是,根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问。 

    想要知道js怎么链式查找,就得先了解js的执行环境

    执行环境(execution context)

    每个函数运行时都会产生一个执行环境,而这个执行环境怎么表示呢?js为每一个执行环境关联了一个变量对象。环境中定义的所有变量和函数都保存在这个对象中。 

    全局执行环境是最外围的执行环境,全局执行环境被认为是window对象,因此所有的全局变量和函数都作为window对象的属性和方法创建的。 

    js的执行顺序是根据函数的调用来决定的,当一个函数被调用时,该函数环境的变量对象就被压入一个环境栈中。而在函数执行之后,栈将该函数的变量对象弹出,把控制权交给之前的执行环境变量对象。 

    闭包

    闭包有两个作用: 

    第一个就是可以读取自身函数外部的变量(沿着作用域链寻找) 

    第二个就是让这些外部变量始终保存在内存中 

    varouterVar ="outer";functionfn(){console.log(outerVar); } fn();//result:outervarouterVar ="outer";functionfn(){console.log(outerVar); } fn();//result:outer

    varouterVar ="outer";functionfn(){console.log(outerVar); } fn();//result:outer

    varouterVar ="outer";functionfn(){console.log(outerVar); } fn();//result:outer

    varouterVar ="outer";functionfn(){console.log(outerVar); } fn();//result:outervarouterVar ="outer";functionfn(){console.log(outerVar); } fn();//result:outer

    相关文章

      网友评论

          本文标题:函数的作用域是什么

          本文链接:https://www.haomeiwen.com/subject/yaqfkftx.html