zoukankan      html  css  js  c++  java
  • 重拾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预解析机制 中详细讲解。
    前端狗-原文链接

  • 相关阅读:
    用python对汉诺塔动态的实现
    用python语言算π值并且带有进度条
    turtle库的学习笔记
    Leetcode 230 二叉搜索树中第k小的元素
    Leetcode 665 非递减数列
    Leetcode 1423 可获得的最大点数
    Leetcode 222 完全二叉树的节点个数
    Leetcode 1208尽可能使字符串相等
    Leetcode 199 二叉树的右视图
    Leetcode 634 子数组最大平均数
  • 原文地址:https://www.cnblogs.com/xrds/p/5605187.html
Copyright © 2011-2022 走看看