为了转生而点技能-javascript-基础观念练习题(hoisting、RHS、LHS、scope)。

第1题.

https://ithelp.ithome.com.tw/upload/images/20211121/20143762SQyRl0X1R8.jpg

试答:

依照提升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题.

https://ithelp.ithome.com.tw/upload/images/20211121/201437627RG5OWUqv1.jpg

试答:

依照RHS跟LHS规则:

1 = true;

1非变数,无法根据LHS规则给予赋值,所以会出现 left-hand side的错误讯息。

console.log(a);

变数a需根据RHS规则向右查找值,但是尚未宣告变数a,会出现not defined的错误讯息。

第3题.

https://ithelp.ithome.com.tw/upload/images/20211121/20143762roNkzaDwfB.jpg

试答:

依照提升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题.

https://ithelp.ithome.com.tw/upload/images/20211121/20143762bH82b4GzpH.jpg

试答:

依照javascript语言特性含有同步与非同步的特徵,函式setTimeout(function ()----)属於非同步范畴,需等到函式function a完成後再执行,故3秒後出现Mary的讯息。

第5题.

https://ithelp.ithome.com.tw/upload/images/20211121/20143762xhJcu1Fj05.jpg

试答:

依照提升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题.

https://ithelp.ithome.com.tw/upload/images/20211121/201437624dMZcKdGMs.jpg

试答:

依照RHS跟LHS规则:

sayHi() = 'Tomy';

sayHi()非变数,无法根据LHS规则给予赋值,所以会出现 left-hand side的错误讯息。

第7题.

https://ithelp.ithome.com.tw/upload/images/20211121/20143762tg0xsQpEV5.jpg

试答:

依照提升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题.

https://ithelp.ithome.com.tw/upload/images/20211121/201437627ynDoTV8k7.jpg

试答:

依照提升Hoisting的观念
创造阶段:

function fu(){
  if(a){
    console.log('Hello');
  }else{
    console.log('oh!');
  }
}
var a

执行阶段:

fu();
a  = true
  1. 先宣告变数a但是尚未赋值。
  2. 执行function fu(),因为变数a尚未赋值,所以if为fale,结果为oh!。

<<:  为了转生而点技能-javascript,day3(观念厘清-执行绪与同步、非同步

>>:  为了转生而点技能-javascript,day3(陈述式及表达式、函式陈述式与函式表达式

05

蒙特兰在过去曾经讲过,在别人藐视的事中获得成功,是一件了不起的事,因为它证明不但战胜了自己,也战胜了...

第42天~

这个得上一篇:https://ithelp.ithome.com.tw/articles/10258...

Day29-台湾菜鸟工程师除错之卷四

不过让我印象最深刻的面试就是yahoo所委托的专案 那时候委托者是需要做出一个yahoo news...

[Day29] Whack A Mole Game

[Day29] Whack A Mole Game 打地鼠 需要用到的技巧与练习目标 const s...

DAY24:Broadcast receiver之简介

今天要来介绍广播接收程序,先从Broadcast receiver的运作机制,它的运作机制包含:送出...