JavaScript变量声明详解

 更新时间:2014年11月27日 09:17:11   投稿:hebedich  
本文详细向大家介绍了javascript变量声明,并通过示例进行了具体分析,是篇非常不错的文章,这里推荐给刚入门的jser。

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

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

复制代码 代码如下:

function 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”(悬置/置顶解析/预解析)。

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

复制代码 代码如下:

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);<br>  myname = "local_huming";
  alert(myname);    // "local"
}
test();

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

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

书写规范:

复制代码 代码如下:

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

 

好处在于:

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

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

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

相关文章

  • 原生JavaScript+LESS实现瀑布流

    原生JavaScript+LESS实现瀑布流

    这篇文章主要介绍了原生JavaScript+LESS实现瀑布流的方法,附上了具体实例,这里推荐给有需要的小伙伴。
    2014-12-12
  • 微信小程序使用扩展组件库WeUI的入门教程

    微信小程序使用扩展组件库WeUI的入门教程

    WeUI是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,令用户的使用感知更加统一,下面这篇文章主要给大家介绍了关于微信小程序使用扩展组件库WeUI的相关资料,需要的朋友可以参考下
    2022-04-04
  • 使用typeof方法判断undefined类型

    使用typeof方法判断undefined类型

    使用typeof方法,typeof 返回的是字符串,其中就有一个是undefined,下面是示例代码,大家可以看看
    2014-09-09
  • 利用递增的数字返回循环渐变的颜色的js代码

    利用递增的数字返回循环渐变的颜色的js代码

    其实很久前就想写一个这样的函数了。因为很多时候需要利用递增数字返回一个渐变颜色序列,今天终于完成了。
    2008-10-10
  • js实现表单及时验证功能 用户信息立即验证

    js实现表单及时验证功能 用户信息立即验证

    这篇文章主要为大家详细介绍了js实现表单及时验证功能,在输入后就可以立即验证,含用户类型,性别,爱好等验证,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • JS异步任务的并行、串行及二者结合用法

    JS异步任务的并行、串行及二者结合用法

    让多个异步任务按照我们的想法执行,是开发中常见的需求,今天我们就来捋一下,如何让多个异步任务并行,串行,以及并行串行相结合,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • js自动生成的元素与页面原有元素发生堆叠的解决方法

    js自动生成的元素与页面原有元素发生堆叠的解决方法

    商品属性和商品规格是js动态生成的元素,商品扩展信息的两个文本框是原有的元素,他们发生堆叠,下面是一些解决思路
    2014-09-09
  • 使用JavaScript实现简单图像放大镜效果

    使用JavaScript实现简单图像放大镜效果

    图像放大镜在很多网站中都扮演着重要的角色,大多数开发人员使用 jquery 来创建图像放大镜。在本教程中,我将向大家展示如何使用 HTML、CSS 和 JavaScript 制作一个简单的图像放大镜,需要的可以参考一下
    2022-08-08
  • 原生js编写贪吃蛇小游戏

    原生js编写贪吃蛇小游戏

    这篇文章主要为大家详细介绍了原生js编写贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • 浅谈JavaScript的事件

    浅谈JavaScript的事件

    事件是可以被 JavaScript 侦测到的行为。网页中的每个元素都可以产生某些可以触发 JavaScript 函数的事件。比方说,我们可以在用户点击某按钮时产生一个 onClick 事件来触发某个函数。事件在 HTML 页面中定义。
    2015-02-02

最新评论