html5中文学习网

您的位置: 首页 > 网站及特效实例 > javascript特效 » 正文

JavaScript变量声明详解_javascript技巧_

[ ] 已经帮助:人解决问题

定义在函数体外的都属于全局变量,定义在函数体内的属于局部变量。这里的定义是指通过var声明的。YacHTML5中文学习网 - HTML5先行者学习网

JavaScript有隐含的全局概念,意味着你不声明的任何变量都会成为一个全局对象属性。例如:YacHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
YacHTML5中文学习网 - HTML5先行者学习网
function test(){YacHTML5中文学习网 - HTML5先行者学习网
    myname = "huming";YacHTML5中文学习网 - HTML5先行者学习网
    alert(myname);YacHTML5中文学习网 - HTML5先行者学习网
}YacHTML5中文学习网 - HTML5先行者学习网
test();  // "huming"YacHTML5中文学习网 - HTML5先行者学习网
alert(myname);  //"huming"YacHTML5中文学习网 - HTML5先行者学习网
YacHTML5中文学习网 - HTML5先行者学习网

 两个结果是一样的,说明myname是一个全局变量。YacHTML5中文学习网 - HTML5先行者学习网

那么,隐式全局变量和明确定义的全局变量有没有区别呢。。答案肯定是有的,看下面的例子:YacHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
YacHTML5中文学习网 - HTML5先行者学习网
// 定义三个全局变量YacHTML5中文学习网 - HTML5先行者学习网
var global_test1 = 1;YacHTML5中文学习网 - HTML5先行者学习网
global_test2 = 2; // 反面教材YacHTML5中文学习网 - HTML5先行者学习网
(function () {YacHTML5中文学习网 - HTML5先行者学习网
    global_test3 = 3; // 反面教材YacHTML5中文学习网 - HTML5先行者学习网
}());YacHTML5中文学习网 - HTML5先行者学习网
// 试图删除YacHTML5中文学习网 - HTML5先行者学习网
delete global_test1; // falseYacHTML5中文学习网 - HTML5先行者学习网
delete global_test2; // trueYacHTML5中文学习网 - HTML5先行者学习网
delete global_test3; // trueYacHTML5中文学习网 - HTML5先行者学习网
// 测试该删除YacHTML5中文学习网 - HTML5先行者学习网
alert(typeof global_test1); // "number"YacHTML5中文学习网 - HTML5先行者学习网
alert(typeof global_test2); // "undefined"YacHTML5中文学习网 - HTML5先行者学习网
alert(typeof global_test3); // "undefined"YacHTML5中文学习网 - HTML5先行者学习网
YacHTML5中文学习网 - HTML5先行者学习网

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

总结来说,在函数体外通过var声明的全局变量不能被删除,而隐式全局变量是可以删除的。YacHTML5中文学习网 - HTML5先行者学习网

这里要注意了:JavaScript有一种行为叫做“hoisting”(悬置/置顶解析/预解析)。YacHTML5中文学习网 - HTML5先行者学习网

我们通过一个例子来说明:YacHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
YacHTML5中文学习网 - HTML5先行者学习网
var myname = "huming"; //声明全局变量YacHTML5中文学习网 - HTML5先行者学习网
function test() {YacHTML5中文学习网 - HTML5先行者学习网
    alert(myname);YacHTML5中文学习网 - HTML5先行者学习网
    var myname = "local_huming";YacHTML5中文学习网 - HTML5先行者学习网
    alert(myname);YacHTML5中文学习网 - HTML5先行者学习网
}YacHTML5中文学习网 - HTML5先行者学习网
test();YacHTML5中文学习网 - HTML5先行者学习网
YacHTML5中文学习网 - HTML5先行者学习网

 你猜两次alert的内容一致吗??显然不一致,一致还用说吗。。实际输出是:"undefined", "local_huming"。YacHTML5中文学习网 - HTML5先行者学习网

上面的例子等同于YacHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
YacHTML5中文学习网 - HTML5先行者学习网
var myname = "huming"; //声明全局变量YacHTML5中文学习网 - HTML5先行者学习网
function test() {YacHTML5中文学习网 - HTML5先行者学习网
  var myname;YacHTML5中文学习网 - HTML5先行者学习网
  alert(maname);<br>  myname = "local_huming";YacHTML5中文学习网 - HTML5先行者学习网
  alert(myname);    // "local"YacHTML5中文学习网 - HTML5先行者学习网
}YacHTML5中文学习网 - HTML5先行者学习网
test();YacHTML5中文学习网 - HTML5先行者学习网
YacHTML5中文学习网 - HTML5先行者学习网

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

这样应该就明白了吧。当你在函数体中使用了一个变量,又在之后重新声明的话,就可能产生错误。YacHTML5中文学习网 - HTML5先行者学习网

书写规范:YacHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
YacHTML5中文学习网 - HTML5先行者学习网
function test() {YacHTML5中文学习网 - HTML5先行者学习网
   var a = 1,YacHTML5中文学习网 - HTML5先行者学习网
       b = 2,YacHTML5中文学习网 - HTML5先行者学习网
       c = a + b,YacHTML5中文学习网 - HTML5先行者学习网
       d = {},YacHTML5中文学习网 - HTML5先行者学习网
       e,YacHTML5中文学习网 - HTML5先行者学习网
       f;YacHTML5中文学习网 - HTML5先行者学习网
   // function body...YacHTML5中文学习网 - HTML5先行者学习网
}YacHTML5中文学习网 - HTML5先行者学习网
YacHTML5中文学习网 - HTML5先行者学习网
 YacHTML5中文学习网 - HTML5先行者学习网

好处在于:YacHTML5中文学习网 - HTML5先行者学习网

1、所有局部变量都定义在函数开始,方便查找;YacHTML5中文学习网 - HTML5先行者学习网

2、防止变量在定义之前使用的逻辑错误。YacHTML5中文学习网 - HTML5先行者学习网

小伙伴们是否了解了javascript的变量声明了呢,以上内容很详细也很易懂,最后的总结也很中肯,小伙伴们不要错过。YacHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助