js作用域

转载 2017年01月03日 12:58:35

js是与很多编程语言不同它没有级块作用域这么一个概念,其变量的作用域是以声明和函数来区分的,即var和function,也就是说只要在函数里面声明了var那么该声明的变量的作用域只能在其所在的函数范围内,请看以下的示例:

复制代码
<script type="text/javascript">
var a="aa";
function tester(){
    alert(a);
    var a;
    a ="bb";
    alert(a);
}
tester();
</script>
复制代码

大家猜猜输出的结果是什么,估计很多人会说:aa、bb;但是输入的结果是undefined、bb;为什么呢?还记得前面所说吗?js变量的作用域是由var和function所决定的,上例中,我们的变量定义在function test(){var aa;}内所以aa的作用域为test这个函数所定义的范围内,但是在调用第一个alert时候函数体内只有声明而出售值,所以其值取为undefined,而调用第二个alert的时候aa的值被赋值为bbbb;js中变量的作用域只会向上层去搜索,直到找到变量的var定义就会停止向上去搜索,如果都没有找到var定义,则变量的作用域范围就是全局的了。

在编写js代码时,我们应该尽量避免js变量的向上搜索,因为这样会造成一定程度上的性能问题,所以尽量把变量定义在函数体内是一个很好的做法。

也可以像下面这样,把所有的全局变量都封装到一个对象里面:

复制代码
<script>
var parameters = {
   a:1;
   b:2;
}
parameters.c=3;
</script>
复制代码

这样做就在一定程度上面减少了全局变量的使用,从而提高了性能。

理解 js的作用域

1.ES5中的作用域for(var i =0;i
  • qq_23980427
  • qq_23980427
  • 2017年01月21日 14:02
  • 2494

JS之参数作用域

这阵子因为要学习React Native ,而RN必备的知识就是JS,所以开始学习起来了Js,在此声明写博客就是为了更好的学习,总结一些我学习过程中知识点,有不同意见的请尽情发表! 1.普通参数...
  • lu1024188315
  • lu1024188315
  • 2017年06月16日 10:29
  • 267

理解js作用域原型链和执行上下文

作用域跟函数紧密相关。每个函数就是一个作用域,同时包括一个全局的作用域。作用域有上下级关系,子作用域可以访问到父作用域的变量跟函数,但是父作用域无法访问到子作用域的变量跟函数(这里说的访问是直接访问,...
  • fhb19870610
  • fhb19870610
  • 2016年02月27日 22:34
  • 580

关于JavaScript作用域的练习题

var y = 'global'; function test(x){ if(x){ var y ='local'; } return y; } console.log(test(true)...
  • sinat_27350883
  • sinat_27350883
  • 2015年12月23日 15:17
  • 957

JS IF 作用域

随笔记录一下JS 中使用域自动提升时的一些注意点:/** * Created by HuangSL on 2017/09/12. */ function testScope() { var ...
  • hsl0530hsl
  • hsl0530hsl
  • 2017年09月12日 14:39
  • 278

JS中的块级作用域,var、let、const三者的区别

首先,ECMAScript和JavaScript关系:       ECMAScript是一个国际通过的标准化脚本语言。JavaScript由ECMAScript和DOM、BOM三者组成。可以简单理...
  • hot_cool
  • hot_cool
  • 2017年10月21日 12:22
  • 239

js中可以改变作用域的三中方式(改变this)

第一种方式:使用apply()方法: function sum(x, y) {  alert(this); return x + y;//这里的this指的是callS对象方法 } f...
  • liuqiao1123
  • liuqiao1123
  • 2015年09月23日 11:29
  • 937

JavaScript词法作用域(你不知道的JavaScript)

JavaScript并不是传统的块级作用域,而是函数作用域! 一、作用域 1. JavaScript引擎在代码执行前会对其进行编译,在这个过程中,像var a = 2 这样的声明会被分解成两个...
  • ligang2585116
  • ligang2585116
  • 2015年06月04日 21:20
  • 4507

javascript深入之词法作用域和动态作用域

作用域作用域是指程序源代码中定义变量的区域。作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。JavaScript 采用词法作用域(lexical scoping),也就是静态作用域。...
  • liwenfei123
  • liwenfei123
  • 2017年09月13日 14:37
  • 275

js 和 java 作用域的区别

1. javascript     按照点击顺序 1 ,2   展示值的变化 var testdoamin ="初始值"; function changeVal(){ testdoamin ="改...
  • q542928492
  • q542928492
  • 2016年03月02日 11:49
  • 713
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:js作用域
举报原因:
原因补充:

(最多只允许输入30个字)