剛剛遇到的幾道題,感覺自己還是有很多的知識點都不清楚,記錄下
第一道
var myObject = {
foo:
"bar"
,
func: function() {
var self =
this
;
console.log(
this
.foo);
console.log(self.foo);
(function() {
console.log(
this
.foo);
console.log(self.foo);
}());
}
};
myObject.func();
求的是該程式輸出的是什麼?
結果是:
bar bar undefined bar
第三個不明白,看了解析才恍然大悟,原來是這樣
解析:
1.第一個this.foo輸出bar,因為當前this指向物件myObject。
2.第二個self.foo輸出bar,因為self是this的副本,同指向myObject物件。
3.第三個this.foo輸出undefined,因為這個IIFE(立即執行函式表示式)中的this指向window。
4.第四個self.foo輸出bar,因為這個匿名函式所處的上下文中沒有self,所以通過作用域鏈向上查詢,從包含它的父函式中找到了指向myObject物件的self。
第二道
function Foo(){
var i=
0
;
return
function(){
document.write(i++);
}
}
var f1=Foo(),
f2=Foo();
f1();
f1();
f2();
請問以上程式的輸出是()
答案是:010
第二個不懂
解析
這是一個閉包,閉包可以用在許多地方。它的最大用處有兩個,一個是前面提到的可以讀取函式內部的變數,另一個就是讓這些變數的值始終保持在記憶體中。 這裡的區域性變數i,對f1()來說是全域性變數,對f2()來說也是全域性變數,但是f1()的i跟f2()的i又是相互獨立相互不可見的,f1()每執行一次,f1()的i就加一,f2()每次執行一次,f2()的i就加油,但是相互之間不影響,因此結果是010
第三道
在檔案/home/somebody/workspace/somemodule.js中第一行引用了一個模組:require(‘othermodule‘),請問required 的查詢模組的順序 A. /home/somebody/workspace/node_modules/othermodule/index.js B. /home/somebody/workspace/node_modules/othermodule. Js C.CORE MODULES named othermodule D./home/somebody/node_modules/othermodule/index.js
答案是:CBAD
解析
(1):首先,Node在當前目錄下查詢package.json(CommonJS包規範定義的包描述檔案),通過JSON.parse()解析出包描述物件,從中取出main屬性指定的檔名進行定位。如果檔案缺少副檔名,將會進入副檔名分析的步驟。 (2):而如果main屬性制定的檔名錯誤,或者壓根沒有package.json檔案,Node會將index當做預設檔名,然後依次查詢index.js、index.node、index.json. (3):如果在目錄分析的過程中沒有定位成功任何檔案,則自定義模組進入下一個模組路徑進行查詢。如果模組路徑陣列都被遍歷完畢,依然沒有查詢到目標檔案,則會丟擲查詢失敗異常。 按照上面的思路,首先應該查詢package.json檔案,看看裡面有沒有核心模組,應該是C最先,othermodule不是核心模組,那麼接著應該進入副檔名分析的步驟,就應該是查詢othermodule. js,對應B,緊接著就是以index為預設檔名,也就是A,再接下來就是上一個檔案目錄D了, 所以答案是: C B A D