• 技术文章 >web前端 >js教程

    浅析JavaScript声明变量_javascript技巧

    2016-05-16 15:24:13原创511
    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关键字

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

    函数声明

    变量声明

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

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:JavaScript+CSS无限极分类效果完整实现方法_javascript技巧 下一篇:js实现点击复制当前文本到剪贴板功能(兼容所有浏览器)_javascript技巧
    大前端线上培训班

    相关文章推荐

    • innerhtml是jquery方法么• javascript 怎么将时间转毫秒• javascript怎么设置标签的背景颜色• jquery select 不可编辑怎么办• 深入浅析Angular中的类(class)装饰器

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网