JavaScript变量声明详解

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

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

代码如下:
test(){ myname = "huming"; alert(myname); } test();  // "huming" alert(myname);  //"huming"

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

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

代码如下:
全局变量 var global_test1 = 1; global_test2 = 2; // 反面教材 (function () { global_test3 = 3; // 反面教材 }()); // 试图删除 delete global_test1; // false delete global_test2; // true delete global_test3; // true // 测试该删除 alert(typeof global_test1); // "number" alert(typeof global_test2); // "undefined" alert(typeof global_test3); // "undefined"

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

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

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

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

代码如下:
全局变量 function test() { alert(myname); var myname = "local_huming"; alert(myname); } test();

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

上面的例子等同于

代码如下:
全局变量 function test() {   var myname;   alert(maname);
  myname = "local_huming";   alert(myname); // "local" } test();

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

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

书写规范:

代码如下:
test() { var a = 1, b = 2, c = a + b, d = {}, e, f; // function body... }

好处在于:

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

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

小伙伴们是否了解了javascript的变量声明了呢,以上内容很详细也很易懂,最后的总结也很中肯,小伙伴们不要错过。

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...