• 重拾javascript系列-JS声明详解之var


    前端 Js 声明语句详解 共三种。

    第一种 var 也是大家最熟悉的。

    语法 :

    var varname1 = value1, varname2, varname3..., varnameN;

    varnameN

    变量名。变量名可以定义为任何合法标识符。

    valueN

    变量的初始化值。该值可以为任何合法表达式。

    作用域:

    1.声明变量的作用域限制在其声明位置的上下文中,而非声明变量总是全局的。

    function x() {
      y = 1;      // 在严格模式下会抛出异常。
      var z = 2;
    }
    x();
    console.log(y);
    console.log(z);
    

    2.声明变量在任何代码执行前创建,而非声明变量只有在执行赋值操作的时候才会被创建。

    声明变量

    var a;
    console.log(a);                // undefined
    console.log('still going...'); // still going...
    

    非声明变量

    console.log(b);                // 会抛出异常。
    console.log('still going...'); // 永不执行
    

    由于以上三个区别,声明变量的错误会导致不可预测的结果。于是,无论是否在函数中,我们总是推荐使用声明变量

    在ECMAScript 5的严格模式(strict mode)下,给一个未声明的变量赋值会抛出错误。

    变量声明预解析:

    由于变量声明(以及其他声明)总是在任意代码执行之前处理的,所以在代码中的任意位置声明变量总是等效于在代码开头声明。这意味着变量可以在声明之前使用,这个行为叫做“hoisting”。“hoisting”就像是把所有的变量声明移动到函数或者全局代码的开头位置。

    console.log(c);     // undefined
    var c = 'test hoisting';
    console.log(c);     // test hoisting
    

    可以理解为

    var c;
    console.log(c);     // undefined
    c = 'test hoisting';
    console.log(c);     // test hoisting
    

    js预解析 还有很多妙不可言的地方。我会在 重拾javascript系列-JS预解析机制 中详细讲解。
    前端狗-原文链接

  • 相关阅读:
    libevent中的bufferevent原理
    libevent中的事件机制
    libevent中数据缓冲区buffer分析
    libevent中最小堆实现算法解析
    我眼中的WebViewJavascriptBridge(图解)
    Tinyhttpd精读解析
    app微信支付的集成步骤
    java工厂模式的测试
    java Annotation 注解的使用
    android 连接蓝牙打印机 BluetoothAdapter
  • 原文地址:https://www.cnblogs.com/xrds/p/5605187.html
Copyright © 2020-2023  润新知