欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

javascript 考題

JavaScript 是一種常用的腳本語(yǔ)言,在前端開(kāi)發(fā)中具有重要的作用。作為前端開(kāi)發(fā)者,我們需要了解一些 JavaScript 的知識(shí)。在面試中經(jīng)常會(huì)遇到一些 JavaScript 相關(guān)的考題。下面我就來(lái)介紹一些常見(jiàn)的 JavaScript 考題。

首先我們來(lái)看一個(gè)簡(jiǎn)單的 JavaScript 考題:

var a = 10;
(function() {
alert(a)
})();

運(yùn)行后的結(jié)果是什么呢?答案是 10。因?yàn)樵诤瘮?shù)內(nèi)部沒(méi)有聲明與變量 a 同名的變量,所以會(huì)訪問(wèn)外部的變量 a。

接下來(lái)看一個(gè)閉包相關(guān)的考題:

for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i)
}, i * 1000)
}

運(yùn)行這段代碼后會(huì)輸出什么?答案是 5 個(gè) 5,因?yàn)?setTimeout 是異步執(zhí)行的,當(dāng)函數(shù)執(zhí)行時(shí),for 循環(huán)已經(jīng)結(jié)束,此時(shí) i 的值已經(jīng)變成了 5。正確的做法是使用閉包來(lái)保存 i 的值:

for (var i = 0; i < 5; i++) {
(function(i) {
setTimeout(function() {
console.log(i)
}, i * 1000)
})(i)
}

再來(lái)看一個(gè)關(guān)于 this 的考題:

var obj = {
name: 'Alice',
sayName: function() {
console.log(this.name)
}
}
setTimeout(obj.sayName, 1000);

運(yùn)行后會(huì)輸出什么?答案是 undefined,因?yàn)?setTimeout 中的函數(shù)是在全局作用域中執(zhí)行的,此時(shí)的 this 指向全局對(duì)象 window。正確的做法是使用匿名函數(shù)來(lái)改變 this 的指向:

setTimeout(function() {
obj.sayName()
}, 1000);

最后來(lái)看一個(gè)關(guān)于繼承的考題:

function Person(name) {
this.name = name
}
Person.prototype.sayName = function() {
console.log(this.name)
}
function Student(name, grade) {
Person.call(this, name)
this.grade = grade
}
Student.prototype = Object.create(Person.prototype)
Student.prototype.constructor = Student
var s = new Student('Bob', 3)
s.sayName()

運(yùn)行后會(huì)輸出什么?答案是 Bob,因?yàn)?Student 繼承了 Person 的原型,所以可以調(diào)用 Person 中的方法。

總結(jié)來(lái)說(shuō),JavaScript 考題涉及的知識(shí)點(diǎn)比較廣泛,包括作用域、閉包、this、繼承等。掌握這些知識(shí)點(diǎn)可以幫助我們更好地理解和應(yīng)用 JavaScript。在面試中,我們需要做好準(zhǔn)備,提前學(xué)習(xí)相關(guān)的知識(shí)點(diǎn),并鍛煉我們的思考能力和編程能力。