在讲Hoisting之前,要先解释一下undefined
与 is not defined
的差异:
undefined
: 是指「已宣告未赋值」的变数或函数。
var a;
console.log(a) //undefined
is not defined
: 是指「未宣告」的意思。
console.log(b) // ReferenceError: b is not defined
而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的重要特性: 变数仅提升宣告的部分,而不会提升赋值。
也就是说,函式在宣告时就会完整放在记忆体空间里,而变数就只是宣告但不会赋值。
本篇同步发布於个人Blog: [Refactoring] Chapter 1 Refactoring...
安全控制是风险处理的一部分,风险评估之後进行。安全控制的范围是根据风险评估的结果确定的。根据NIST...
Ta-Lib是非常好用的技术指标模组,提供高达100多种的技术指标,常见的技术指标几乎都可以在这里找...
永丰金证券的 Shioaji API目前有 python 和 c# 的 Library,这次的介绍以...
放射线背景 教学原文参考:放射线背景 这篇文章会介绍使用 GIMP 的渐层填色,搭配滤镜的「小小星球...