第1题.
试答:
依照提升Hoisting的观念
创造阶段:
var a;
执行阶段:
console.log(a);a = 'Hello'console.log(a);
依照RHS跟LHS规则:
console.log(a); -> 向右查找var a的值属于RHS,但是尚未赋值,所以出现结果undefined。
a = 'Hello'
console.log(a); ->向右查找var a的值属于RHS,但是上一行程式码已赋予变数a = 'Hello',所以出现Hello。
第2题.
试答:
依照RHS跟LHS规则:
1 = true;
1非变数,无法根据LHS规则给予赋值,所以会出现 left-hand side的错误讯息。
console.log(a);
变数a需根据RHS规则向右查找值,但是尚未宣告变数a,会出现not defined的错误讯息。
第3题.
试答:
依照提升Hoisting的观念
创造阶段:
function sayHi(){ var a = 'Mary'; a = 'Tom';}var a
执行阶段:
a = 'Casper'sayHi();console.log('Hello'+' '+a);
console.log的a变数是来自于全域变数var a,非函式里面的区域变数 a = 'Tom',所以为Hello Casper。
第4题.
试答:
依照javascript语言特性含有同步与非同步的特徵,函式setTimeout(function ()----)属于非同步範畴,需等到函式function a完成后再执行,故3秒后出现Mary的讯息。
第5题.
试答:
依照提升Hoisting的观念
创造阶段:
function youName(){ console.log('你叫什么');}function sayHi(name){ console.log('oh' + ' ' + name + ' ' +'你好!');}function myName(name){ setTimeout(function(){ console.log('我叫' + ' ' + name + '!'); },0)}var name
执行阶段:
name = 'Tomy'youName();myName(name);sayHi(name);
youName():'你叫什么'
myName(name):依照javascript语言特性含有同步与非同步的特徵,函式setTimeout(function ()----)属于非同步範畴,与等到其他执行完毕。
sayHi(name):name已经先行赋值为'Tomy',所以会出现 oh Tomy 你好!。
回到function myName(name): 我叫 Tomy !。
第6题.
试答:
依照RHS跟LHS规则:
sayHi() = 'Tomy';
sayHi()非变数,无法根据LHS规则给予赋值,所以会出现 left-hand side的错误讯息。
第7题.
试答:
依照提升Hoisting的观念
创造阶段:
function sayHi(a){ var a = 'Mark'; function fu(){ var a = 'Casper' } fu(); a = 'HexSchool'}var a
执行阶段:
a = 'Mary'sayHi(a);console.log(a);
sayHi(a):
1. a在全域执行环境已经被赋值'Mary'。
2. function sayHi(a),里面的var a = 'Mark'只是区域变数,当函式function sayHi(a)运作完之
后,就没有作用。
所以最后会出现 Mary。
第8题.
试答:
依照提升Hoisting的观念
创造阶段:
function fu(){ if(a){ console.log('Hello'); }else{ console.log('oh!'); }}var a
执行阶段:
fu();a = true
先宣告变数a但是尚未赋值。执行function fu(),因为变数a尚未赋值,所以if为fale,结果为oh!。