zoukankan      html  css  js  c++  java
  • js变量声明提升

    1、变量提升

    根据javascript的运行机制和javascript没有块级作用域这个特点,可以得出,变量会声明提升移至作用域 scope (全局域或者当前函数作用域) 顶部的。

    • 变量声明提升至全局域
    console.log(a); // undefined
    var a ="Hi";
    
    相当于
    
    var a; // 变量提升到全局作用域
    console.log(a); // 已声明变量a,但未初始化,固为undefined
    a="Hi";
    • 变量声明提升至当前函数域
     var name = "boy";
            (function () {
                if (typeof name == 'undefined')
                {
                var name = 'girl';
                console.log('Hi,' + name);
                }
                else
                {
                console.log('Hi,' + name);
                }
            })();// 控制台输出Hi,girl
    
    相当于
    
     var name = "boy";
            (function () {
                var name; //变量提升到当前函数作用域 
                if (typeof name == 'undefined')
                {
                     name = 'girl';
                console.log('Hi,' + name);
                }
                else
                {
                console.log('Hi,' + name);
                }
            })();    

    2、undefined和未定义(not defined)区别

    • undefined

      undefined 表达的含义有三种情况:

    1. 这个变量 存在 ,但是并没有给予任何值。
    2. 一种普通的数据类型和一种值。你可以手工将任何变量赋值为 undefined,此时其没有特别含义。
    3. 一个 存在的对象 中的一个 不存在 (没有声明)的值,会被认为是 undefined。

      对这三种情况进行归纳,undefined 可以如下总结:

    • 它是一种数据类型,也是一种值。
    • 有这种值的时候,要么它本身被赋值,要么本身存在,要么其所在对象存在。完全不存在的变量不会是 undefined。 
    • 未定义(not defined)

    一个 未定义 (not defined) 的变量是 完全没有任何声明 的变量。这样的变量在使用时会直接抛出致命错误。但是,如果使用 typeof 来判断这样的变量,不但不会出错,而且竟然会返回 undefined ,这使得无法使用 typeof 来区分这两种情况。

  • 相关阅读:
    Bootstrap 4/3 页面基础模板 与 兼容旧版本浏览器
    Asp.net core 项目实战 新闻网站+后台 源码、设计原理 、视频教程
    C# 数据类型转换 显式转型、隐式转型、强制转型
    C# 多维数组 交错数组的区别,即 [ , ] 与 [ ][ ]的区别
    C#/Entity Frame Core 使用Linq 进行分页 .Skip() .Take() 的使用方法
    利用 Xunsearch 搭建搜索引擎、内容搜索实战
    Delphi
    Python
    Python
    Python
  • 原文地址:https://www.cnblogs.com/ch-n/p/6842881.html
Copyright © 2011-2022 走看看