IT培训网

达内论坛

 找回密码
 立即注册
搜索
查看: 52|回复: 0

简析JavaScript的作用域

[复制链接]

1915

主题

1915

帖子

6628

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6628
QQ
发表于 2019-2-1 10:35:13 | 显示全部楼层 |阅读模式
  什么是作用域?
  Js中的变量或者函数能够被访问到的代码空间(变量或者函数有效的范围)。
  JavaScript中的作用域
  全局作用域;
  局部作用域;
  当一个变量在函数最外层定义时,变量就在全局作用域中,在一个函数内部定义一个变量,这个变量就在局部变量中。
  全局作用域
  最外层函数或者在其外部定义的变量具有全局作用域。
  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具有块级作用域,也就是说在块级声明中创建并使用时,是具有全局作用域的
  在全局作用域声明的变量可以称为全局变量,同理还有全局变量,和函数形参,他们所站的比重是局部变量>函数形参>全局变量





上一篇:怎么制作网页
下一篇:网络编程学什么 网络编程好学吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

IT培训网

QQ|小黑屋|手机版|cnitedu Inc. ( 豫ICP备16023996号-1 )

GMT+8, 2019-2-21 12:32 , Processed in 0.170236 second(s), 13 queries , File On.

Powered by Discuz! X3.3

© 2011-2017 cnitedu Inc.

快速回复 返回顶部 返回列表