[Day06] JavaScript - Hoisting 提升

在讲Hoisting之前,要先解释一下undefinedis not defined 的差异:

undefined : 是指「已宣告未赋值」的变数或函数。

var a;
console.log(a)  //undefined

is not defined : 是指「未宣告」的意思。

console.log(b)   // ReferenceError: b is not defined 

Hoisting

而Hoisting的观念是,不管变数、函式宣告的位置在哪里,JavaScript在一开始载入时都会先找到所有「变数」与「函式 function」,并放入记忆体空间内。

  • 先看以下范例:

    var a = '宣告变数';
    
    function b() {
        console.log('宣告函式');
    }
    
    console.log(a);   //宣告变数
    b();    //宣告函式
    
    

    以上a、b都是预期中的结果。

  • 那如果按照Hoisting的特性,下面的程序执行的结果会是什麽呢?

    console.log(a);   
    b();   
    
    var a = '宣告变数';
    
    function b() {
        console.log('宣告函式');
    }
    

    结果:

    console.log(a);    //undefined
    b();    //宣告函式
    

  • 函式b有成功执行出'宣告函式' ; 而变数a的执行结果却是"undefined",为什麽呢?
    这是因为Hoisting的重要特性: 变数仅提升宣告的部分,而不会提升赋值
     

    也就是说,函式在宣告时就会完整放在记忆体空间里,而变数就只是宣告但不会赋值。


<<:  序幕

>>:  [Day6] 最佳化均线交叉讯号

[Refactoring] Chapter 1 Refactoring: A First Example - RPG Game Hunting Mission

本篇同步发布於个人Blog: [Refactoring] Chapter 1 Refactoring...

NIST SDLC和RMF

安全控制是风险处理的一部分,风险评估之後进行。安全控制的范围是根据风险评估的结果确定的。根据NIST...

Day13 - 如何用shioaji搭配Ta-Lib计算技术指标: 安装篇

Ta-Lib是非常好用的技术指标模组,提供高达100多种的技术指标,常见的技术指标几乎都可以在这里找...

环境建置

永丰金证券的 Shioaji API目前有 python 和 c# 的 Library,这次的介绍以...

Day 15 放射线背景

放射线背景 教学原文参考:放射线背景 这篇文章会介绍使用 GIMP 的渐层填色,搭配滤镜的「小小星球...