码迷,mamicode.com
首页 > 其他好文 > 详细

函数作用域及作用域链

时间:2019-08-06 21:20:24      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:alt   es5   javascrip   关闭   变量   过程   带来   内部使用   com   

变量作用域

全局作用域

在JavaScript中全局变量的作用域比较简单,它的作用域是全局的,在代码的任何地方都是有定义的。然而函数的参数和局部变量只在函数体内有定义

1.函数外面定义的变量拥有全局作用域

var n =2;
function fn() { 
  var a= 1;
  return a;
 }
 console.log(fn())//1
 console.log(n)//2
 console.log(a)//报错 error

 

2未定义直接赋值的变量自动声明为拥有全局作用域

var n =2;
function fn() { 
    a= 1;
  return a;
 }
 console.log(fn())//1
 console.log(n)//2
 console.log(a)//1

3.window对象的属性拥有全局作用

局部作用域

局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所以在一些地方会把这种作用域成为函数作用域。

图一中,a是函数内部声明并赋值,拥有局部作用域,只能带函数fn内部使用,在fn外部使用就会报错,这就是局部作用域的特性,外部无法访问。

3ES6的块级作用域

ES5只有全局作用域和函数作用域,没有块级作用域,会带来下面问题:

 技术图片

ES6引入了块级作用域,明确允许在块级作用域中声明函数,let和const命令都涉及块级作用域。

作用域链

函数的作用域实际上是个动态概念 只有函数调用时,才会在内存中动态开辟一个自己的作用域,函数调用完了这个作用域又关闭了,函数运行过程中在内存创建的数据又被清除了

通俗地讲,当声明一个函数时,局部作用域一级一级向上包起来,就是作用域链。

1.当执行函数时,总是先从函数内部找寻局部变量

2.如果内部找不到(函数的局部作用域没有),则会向创建函数的作用域(声明函数的作用域)寻找,依次向上

 

函数作用域及作用域链

标签:alt   es5   javascrip   关闭   变量   过程   带来   内部使用   com   

原文地址:https://www.cnblogs.com/xcyzkh/p/11311867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!