全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

浅谈JavaScript作用域

发布时间:2019-01-04 15:27:00
发布人:Yolanda

  什么是作用域?

  Js中的变量或者函数能够被访问到的代码空间(变量或者函数有效的范围)。

  JavaScript中的作用域

  全局作用域;

  局部作用域;

  当一个变量在函数最外层定义时,变量就在全局作用域中,在一个函数内部定义一个变量,这个变量就在局部变量中。

图片1

  全局作用域

  最外层函数或者在其外部定义的变量具有全局作用域。

  var a = 10; //全局变量

  function foo(){ //全局函数

  console.log(a);

  }

  这个变量a就在全局作用域中,可以说成是个全局变量,这个a可以子啊认可地方访问或修改。

  还有一点,window对象的属性和方法具有全局作用域

  Eg:

  alert("dddddd");

  window.alert("aaaa");

  var obj = {

  name:"john",

  age:20,

  sayHello:function(x){

  console.log(x);//输出undefined//第二次输出1//第三次输出aaa(要问我为什么会输出三次,因为声明提升的问题,请自行百度)

  }

  };

  console.log(obj.name);//输出jogn

  obj.sayHello();

  console.log(obj.sayHello(1))//输出undefined

  obj.sayHello("aaaaa");

  在一个函数内部声明一个变量不用 var来定义,这个变量具有全局作用域

  function foo(){

  b = 20;

  var a = 10;

  }

  foo();

  console.log(b);

  console.log(a);//a会报错,因为a 是一个局部变量

  局部作用域

  定义在函数中的变量就在局部作用域中。并且函数在每次调用时都有一个不同的作用域。这意味着同名变量可以用在不同的函数中。因为这些变量绑定在不同的函数中,拥有不同作用域,彼此之间不能访问。(在一个函数颞部定义的函数或者用var定义的变量具有局部作用域)

  Eg:

  在ES5中函数去区分全局和局部的唯一的代码块

  if(true){

  var a = 10;

  }

  for(var i =0; i<=0; i++){

  var b = 10;

  }

  console.log(a,b);//a,b都是输出10

  函数的形参具有局部作用域,是局部变量

  function foo(x){

  console.log(x);//输出undefined

  }

  foo();

  console.log(x);//报错

  补充一点块语句

  块级声明包括if和switch,以及for和while循环,和函数不同,它们不会创建新的作用域。在块级声明中定义的变量从属于该块所在的作用域。

  Eg:

  if(true){

  Var name = “join”;

  }

  Console.log(name)//输出join

  Es6中引用了let,const关键字,这些关键字可以代替var,但是和var不同的是,let和const具有块级作用域,也就是说在块级声明中创建并使用时,是具有全局作用域的

  在全局作用域声明的变量可以称为全局变量,同理还有全局变量,和函数形参,他们所站的比重是局部变量>函数形参>全局变量

相关文章

tomcat 与nginx,apache的区别是什么?

tomcat 与nginx,apache的区别是什么?

2023-10-14
HTTP协议中URI和URL有什么区别?

HTTP协议中URI和URL有什么区别?

2023-10-14
单精度与双精度是什么意思,区别是什么?

单精度与双精度是什么意思,区别是什么?

2023-10-14
多核CPU 和多个CPU 有何区别?

多核CPU 和多个CPU 有何区别?

2023-10-14

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取