玩法介绍当前位置:星鸿娱乐 > 玩法介绍 > >

浅析JavaScript声明变量

  

[javascript声明变量,javascript声明]浅析JavaScript声明变量

  

JavaScript的变量声明语句无论出现在何处,都会先于其他代码首先被执行。使用var关键词声明变量的作用域是当前的执行上下文,有可能是外围函数,或者,当变量声明在函数体之外时,则为全局变量。

  

  

定义在函数体外的都属于全局变量,定义在函数体内的属于局部变量。这里的定义是指通过var声明的。

  
  

  

JavaScript有隐含的全局概念,意味着你不声明的任何变量都会成为一个全局对象属性。例如:  

  
  
  function test(){  myname = "huming";  alert(myname);  }  test();  // "huming"  alert(myname);  //"huming" 
  
  

两个结果是一样的,说明myname是一个全局变量。

  
  

  

那么,隐式全局变量和明确定义的全局变量有没有区别呢。。答案肯定是有的,看下面的例子:  
  

  
  
  // 定义三个全局变量  var global_test = ;  global_test = ; // 反面教材  (function () {  global_test = ; // 反面教材  }());  // 试图删除  delete global_test; // false  delete global_test; // true  delete global_test; // true  // 测试该删除  alert(typeof global_test); // "number"  alert(typeof global_test); // "undefined"  alert(typeof global_test); // "undefined" 
  
  

由上面的例子可以看出:在函数之外通过var定义的global_test1不能被删除,而没有经过var定义的global_test2和global_test3都被删除了(无论是否是在函数体内创建)。

  
  

  

总结来说,在函数体外通过var声明的全局变量不能被删除,而隐式全局变量是可以删除的。

  
  

  

这里要注意了:JavaScript有星鸿娱乐注册一种行为叫做“hoisting”(悬置/置顶解析/预解析)。

  
  

  

我们通过一个例子来说明:  
  

  
  
  var myname = "huming"; //声明全局变量  function test() {  alert(myname);  var myname = "local_huming";  alert(myname);  }  test();
  
  

你猜两次alert的内容一致吗??显然不一致,一致还用说吗。。实际输出是:"undefined", "local_huming"。

  
  

  

上面的例子等同于  

  
  
  var myname = "huming"; //声明全局变量  function test() {  var myname;  alert(maname);
  myname = "local_huming";  alert(myname); // "local"  }  test();
  
  

第一次alert输出的myname并不是你以为的全局变量,而是和它在一个作用域(一个函数体)内的局部变量。虽然它还没有被声明,但被当作是声明了。这就是所谓的“hoisting”。

  
  

  

这样应该就明白了吧。当你在函数体中使用了一个变量,又在之后重新声明的话,就可能产生错误。

  
  

  

书写规范:  

  
  
  function test() {  var a = ,  b = ,  c = a + b,  d = {},  e,  f;  // function body...

  }

  
  

好处在于:  
  

  

1、所有局部变量都定义在函数开始,方便查找;  
  

  

2、防止变量在定义之前使用的逻辑错误。

  

  

在javascript中,一个变量名(name)有四种方式进入作用域(scope)中  

  

语言内置,所有的作用域中都有this和arguments关键字  
  

  

形式参数,函数的参数在整个作用域中都是有效的  
  

  

函数声明  
  

  

变量声明  

  

上面列出的四种顺序也正是由高到底的优先级的顺序,一旦一个变量名已经声明了,那么它就不可能被其他更低优先级的变量声明形式所覆盖。

  

(责任编辑:admin)

上一篇:AngularJS中的拦截器实例详解

下一篇:利用JS延迟加载百度分享代码,提高网页速度

推荐内容

客户服务热线

010-400-12345

在线客服