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

第1题.

http://img2.58codes.com/2024/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题.

http://img2.58codes.com/2024/201437627RG5OWUqv1.jpg

试答:

依照RHS跟LHS规则:

1 = true;

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

console.log(a);

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

第3题.

http://img2.58codes.com/2024/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题.

http://img2.58codes.com/2024/20143762bH82b4GzpH.jpg

试答:

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

第5题.

http://img2.58codes.com/2024/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题.

http://img2.58codes.com/2024/201437624dMZcKdGMs.jpg

试答:

依照RHS跟LHS规则:

sayHi() = 'Tomy';

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

第7题.

http://img2.58codes.com/2024/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题.

http://img2.58codes.com/2024/201437627ynDoTV8k7.jpg

试答:

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

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

执行阶段:

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

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章