日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

js面试题知识点全解(一作用域)

發(fā)布時(shí)間:2025/4/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js面试题知识点全解(一作用域) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問(wèn)題:

1.說(shuō)一下對(duì)變量提升的理解

2.說(shuō)明this幾種不同的使用場(chǎng)景

3.如何理解作用域

4.實(shí)際開(kāi)發(fā)中閉包的應(yīng)用

知識(shí)點(diǎn):

js沒(méi)有塊級(jí)作用域
只有函數(shù)和全局作用域,如下代碼:

if(true){var name='killua' //把name定義在塊里和放在外面是一樣的,等同于在外面聲明一個(gè)變量name,在塊內(nèi)給name賦值}//同等于下面的代碼//建議用下面方式寫(xiě)var nameif(true){name='killua'}console.log(name) //打印出來(lái)killua//函數(shù)和全局作用域var a=100 //定義全局作用域變量function fn(){var a=200 //在函數(shù)中定義變量不會(huì)污染外面定義的變量,只能函數(shù)里面用console.log('fn', a) }

當(dāng)前作用域沒(méi)有定義某個(gè)變量,所以要去它的父級(jí)作用域找,這樣的就是作用域鏈

//作用域鏈例子1 var a = 100 //自由變量 function fn(){var b = 200console.log(a) console.log(b) } fn() //作用域鏈例子2 var x =100 function F1(){var y = 200function F2(){var z =300console.log(x)console.log(y)console.log(z)}F2() } F1()

作用域和閉包-執(zhí)行上下文

console.log(a); //undefined var a=10; //這種寫(xiě)法,因?yàn)閍是全局變量。會(huì)把var a;提到最前面 /*以上代碼等同于: var a; console.log(a); a=10;*/fn("killua"); function fn(name){console.log(name) } //函數(shù)聲明會(huì)提前到最前面,所以可以先執(zhí)行函數(shù),再聲明函數(shù)也可以 fn('killua') function fn(name){console.log(this) // console.log(arguments) //參數(shù)age=10console.log(name, age)var agebar(100)function bar(num){console.log(num)} //在函數(shù)內(nèi)也會(huì)把函數(shù)聲明,變量聲明提到函數(shù)內(nèi)部最前面 } //函數(shù)執(zhí)行完輸出//killua 10//100

this介紹:

this要在執(zhí)行時(shí)才能確認(rèn),定義時(shí)無(wú)法確認(rèn)

var a= {name = 'killua',fn: function(){console.log(this.name)} } a.fn() //this===a a.fn.call({name:'L'}) //this==={name:'L'}var fn1 =a.fn fn1() //this===window

構(gòu)造函數(shù)中的this

1 function Foo(name){ 2 this.name = name 3 } 4 var f = new Foo('killua') //實(shí)例化

對(duì)象中的this

1 var obj = { 2 name:'L' 3 printName: function(){ 4 console.log(this.name) 5 } 6 } 7 obj.printName() //作為對(duì)象屬性來(lái)執(zhí)行,this指向obj這個(gè)對(duì)象

普通函數(shù)中的this

1 function fn(){ 2 console.log(this) //作為一個(gè)普通函數(shù)執(zhí)行,this === window 3 } 4 fn()

call apply bind

1 function fn1(name,age){ 2 console.log(this) 3 } 4 fn1.call({x:10},"killua",20) //call調(diào)用一個(gè)對(duì)象的一個(gè)方法,以另一個(gè)對(duì)象替換當(dāng)前對(duì)象,這里把this替換成{x:10} 5 fn2.apply({x:10},['killua',20]) //apply和call方法一樣,只是用數(shù)組的方式傳遞參數(shù),call比較常用 6 var fn3 = function(name,age){ 7 console.log(this) 8 }.bind({y:200}) //.bind()方法和前兩個(gè)一樣,把this替換成{y:200},但是必須用在函數(shù)表達(dá)式,不能用在普通函數(shù) 9 fn3('killua',20)

以上知識(shí)點(diǎn)總結(jié)出題目?jī)?nèi)容

說(shuō)一下對(duì)變量提升的理解:
1.變量定義 //變量聲明會(huì)提前
2.函數(shù)聲明(注意和函數(shù)表達(dá)式的區(qū)別) //函數(shù)聲明提升

說(shuō)明this幾種不同的使用場(chǎng)景:
1.作為構(gòu)造函數(shù)執(zhí)行
2.作為對(duì)象屬性執(zhí)行
3.作為普通函數(shù)執(zhí)行
4.call apply bind

如何理解作用域:
1.自由變量
2.作用域鏈,即自由變量的查找
3.閉包的兩個(gè)場(chǎng)景

轉(zhuǎn)載于:https://www.cnblogs.com/chooper/p/7417865.html

總結(jié)

以上是生活随笔為你收集整理的js面试题知识点全解(一作用域)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。