国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

前端面試筆記 - js相關(guān)

Dogee / 697人閱讀

摘要:將單個(gè)事件綁定在父對(duì)象上,利用冒泡機(jī)制監(jiān)聽(tīng)來(lái)自子元素的事件。事件目標(biāo)當(dāng)?shù)竭_(dá)目標(biāo)元素之后,執(zhí)行目標(biāo)元素該事件相應(yīng)的處理函數(shù)。函數(shù)對(duì)象當(dāng)使用去調(diào)用構(gòu)造函數(shù)時(shí),相當(dāng)于執(zhí)行了原型對(duì)象上都有個(gè)預(yù)定義的屬性,用來(lái)引用它的函數(shù)對(duì)象。

請(qǐng)解釋事件代理 (event delegation)。

將單個(gè)事件綁定在父對(duì)象上,利用冒泡機(jī)制,監(jiān)聽(tīng)來(lái)自子元素的事件。

優(yōu)點(diǎn):解決子元素增加刪除時(shí)候的事件處理,防止內(nèi)存泄漏

事件捕獲:當(dāng)某個(gè)元素觸發(fā)某個(gè)事件(如onclick),頂層對(duì)象document就會(huì)發(fā)出一個(gè)事件流,隨著DOM樹(shù)的節(jié)點(diǎn)向目標(biāo)元素節(jié)點(diǎn)流去,直到到達(dá)事件真正發(fā)生的目標(biāo)元素。在這個(gè)過(guò)程中,事件相應(yīng)的監(jiān)聽(tīng)函數(shù)是不會(huì)被觸發(fā)的。

事件目標(biāo):當(dāng)?shù)竭_(dá)目標(biāo)元素之后,執(zhí)行目標(biāo)元素該事件相應(yīng)的處理函數(shù)。如果沒(méi)有綁定監(jiān)聽(tīng)函數(shù),那就不執(zhí)行。

事件起泡:從目標(biāo)元素開(kāi)始,往頂層元素傳播。途中如果有節(jié)點(diǎn)綁定了相應(yīng)的事件處理函數(shù),這些函數(shù)都會(huì)被一次觸發(fā)。如果想阻止事件起泡,可以使用e.stopPropagation()(Firefox)或者e.cancelBubble=true(IE)來(lái)組織事件的冒泡傳播。

請(qǐng)解釋 JavaScript 中 this 是如何工作的。

stackoverflow

在全局環(huán)境時(shí)

// this 表示window

function f(){
    return this //也是window
}

放在object方法里面時(shí)

this綁定到包含他的對(duì)象

var obj = {
    name: "obj",
    f: function () {
        return this + ":" + this.name;
    }
};
document.write(obj.f());
var obj = {
    name: "obj1",
    nestedobj: {
        name:"nestedobj",
        f: function () {
            return this + ":" + this.name;
        }
    }            
}

document.write(obj.nestedobj.f()); //[object Object]:nestedobj

即使你隱式的添加方法到對(duì)象,this仍然指向
立即父對(duì)象

var obj1 = {
    name: "obj1",
}

function returnName() {
    return this + ":" + this.name;
}

obj1.f = returnName; //add method to object
document.write(obj1.f()); //[object Object]:obj1

當(dāng)調(diào)用一個(gè)無(wú)上下問(wèn)的函數(shù)

當(dāng)函數(shù)調(diào)用沒(méi)有包含上下文,this將綁定到global對(duì)象

var context = "global";

var obj = {  
    context: "object",
    method: function () {                  
        function f() {
            var context = "function";
            return this + ":" +this.context; 
        };
        return f(); //invoked without context
    }
};

document.write(obj.method()); //[object Window]:global 

當(dāng)使用在構(gòu)造函數(shù)時(shí)

即使用new關(guān)鍵字時(shí),this指向剛創(chuàng)建的對(duì)象

var myname = "global context";
function SimpleFun()
{
    this.myname = "simple function";
}

var obj1 = new SimpleFun(); //adds myname to obj1
//1. `new` causes `this` inside the SimpleFun() to point to the
//   object being constructed thus adding any member
//   created inside SimipleFun() using this.membername to the
//   object being constructed
//2. And by default `new` makes function to return newly 
//   constructed object if no explicit return value is specified

document.write(obj1.myname); //simple function

當(dāng)內(nèi)部對(duì)象定義在原型鏈時(shí)

當(dāng)一個(gè)方法定義在對(duì)象原型鏈,this指向調(diào)用該方法的對(duì)象

var ProtoObj = {
    fun: function () {
        return this.a;
    }
};
//Object.create() creates object with ProtoObj as its
//prototype and assigns it to obj3, thus making fun() 
//to be the method on its prototype chain

var obj3 = Object.create(ProtoObj);
obj3.a = 999;
document.write(obj3.fun()); //999

//Notice that fun() is defined on obj3"s prototype but 
//`this.a` inside fun() retrieves obj3.a   

在 call(), apply() and bind() 函數(shù)內(nèi)部

fun.apply(obj1 [, argsArray])
fun.call(obj1 [, arg1 [, arg2 [,arg3 [, ...]]]]) 
設(shè)置this函數(shù)并執(zhí)行
fun.bind(obj1 [, arg1 [, arg2 [,arg3 [, ...]]]])
設(shè)置this

this在事件處理上

如果函數(shù)在eventHandler和onclick直接被調(diào)用 this指向元素(currentTarget)
否則執(zhí)行window



Using `this` "directly" inside event handler or event property



Using `this` "indirectly" inside event handler or event property



IE only:
請(qǐng)解釋原型繼承 (prototypal inheritance) 的原理。

當(dāng)定義一個(gè)函數(shù)對(duì)象的時(shí)候,會(huì)包含一個(gè)預(yù)定義的屬性,叫prototype,這就屬性稱(chēng)之為原型對(duì)象。

function F(){};
console.log(F.prototype)
//F.prototype包含
//contructor構(gòu)造函數(shù)

JavaScript在創(chuàng)建對(duì)象的時(shí)候,都會(huì)有一個(gè)[[proto]]的內(nèi)置屬性,用于指向創(chuàng)建它的函數(shù)對(duì)象的prototype。原型對(duì)象也有[[proto]]屬性。因此在不斷的指向中,形成了原型鏈。

//函數(shù)對(duì)象
function F(){};
F.prototype = {
    hello : function(){}
};
var f = new F();
console.log(f.__proto__)

當(dāng)使用new去調(diào)用構(gòu)造函數(shù)時(shí),相當(dāng)于執(zhí)行了

var o = {};
o.__proto__ = F.prototype;
F.call(o);

原型對(duì)象prototype上都有個(gè)預(yù)定義的constructor屬性,用來(lái)引用它的函數(shù)對(duì)象。這是一種循環(huán)引用。

function F(){};
F.prototype.constructor === F;
( new Foo ).__proto__ === Foo.prototype
( new Foo ).prototype === undefined

__proto__真正的原型鏈
prototype只存在與構(gòu)造函數(shù)中

你怎么看 AMD vs. CommonJS? 請(qǐng)解釋為什么接下來(lái)這段代碼不是 IIFE (立即調(diào)用的函數(shù)表達(dá)式):function foo(){ }();.

沒(méi)有加括號(hào)

要做哪些改動(dòng)使它變成 IIFE? 描述以下變量的區(qū)別:null,undefined 或 undeclared? 該如何檢測(cè)它們?
null===null
undefined === undefined
什么是閉包 (closure),如何使用它,為什么要使用它?

函數(shù)閉包(function closures),是引用了自由變量的函數(shù)。這個(gè)被引用的自由變量將和這個(gè)函數(shù)一同存在,即使已經(jīng)離開(kāi)了創(chuàng)造它的環(huán)境也不例外

請(qǐng)舉出一個(gè)匿名函數(shù)的典型用例?

回調(diào)

你是如何組織自己的代碼?是使用模塊模式,還是使用經(jīng)典繼承的方法? 請(qǐng)指出 JavaScript 宿主對(duì)象 (host objects) 和原生對(duì)象 (native objects) 的區(qū)別? 請(qǐng)指出以下代碼的區(qū)別:function Person(){}、var person = Person()、var person = new Person()? .call 和 .apply 的區(qū)別是什么?

apply 第二個(gè)參數(shù)是數(shù)組
call 第二個(gè)以后的可變參數(shù)

請(qǐng)解釋 Function.prototype.bind? 在什么時(shí)候你會(huì)使用 document.write()?

寫(xiě)script

請(qǐng)指出瀏覽器特性檢測(cè),特性推斷和瀏覽器 UA 字符串嗅探的區(qū)別? 請(qǐng)盡可能詳盡的解釋 Ajax 的工作原理。

XMLHttpRequest

使用 Ajax 都有哪些優(yōu)劣? 請(qǐng)解釋 JSONP 的工作原理,以及它為什么不是真正的 Ajax。

通過(guò)在網(wǎng)頁(yè)中加入script標(biāo)簽,是瀏覽器通過(guò)get方式加載一段js代碼

你使用過(guò) JavaScript 模板系統(tǒng)嗎? 如有使用過(guò),請(qǐng)談?wù)勀愣际褂眠^(guò)哪些庫(kù)? 請(qǐng)解釋變量聲明提升 (hoisting)。

通過(guò) var 聲明的變量在代碼執(zhí)行之前被js引擎提升到了當(dāng)前作用域的頂部

請(qǐng)描述事件冒泡機(jī)制 (event bubbling)。

一個(gè)事件被觸發(fā),會(huì)發(fā)生先捕獲后冒泡的行為。
冒泡機(jī)制指一個(gè)事件從發(fā)生元素開(kāi)始先父元素傳遞,直到達(dá)到根元素

"attribute" 和 "property" 的區(qū)別是什么?

js dom 對(duì)象擁有的property,property有很多類(lèi)型
attribute是指html擁有的特性,類(lèi)型是字符串

為什么擴(kuò)展 JavaScript 內(nèi)置對(duì)象不是好的做法? 請(qǐng)指出 document load 和 document DOMContentLoaded 兩個(gè)事件的區(qū)別。

DomContentLoaded事件發(fā)生在domcument對(duì)象被初始化完成,css,圖片和frame還沒(méi)被加載的時(shí)候

load事件表示資源被全部加載

== 和 === 有什么不同?

==會(huì)發(fā)生類(lèi)型轉(zhuǎn)換
===不會(huì)發(fā)生類(lèi)型轉(zhuǎn)換

請(qǐng)解釋 JavaScript 的同源策略 (same-origin policy)。

同源策略限制從一個(gè)源加載的文檔或腳本如何與來(lái)自另一個(gè)源的資源進(jìn)行交互

http://store.company.com/dir2... 成功
http://store.company.com/dir/... 成功
https://store.company.com/sec... 失敗 不同協(xié)議 ( https和http )
http://store.company.com:81/dir/etc.html 失敗 不同端口 ( 81和80)
http://news.company.com/dir/o... 失敗 不同域名 ( news和store

如何實(shí)現(xiàn)下列代碼:
[1,2,3,4,5].duplicator(); // [1,2,3,4,5,1,2,3,4,5]
Arrry.prototype.duplicator = function(){
    return this.concat(this)
}
什么是三元表達(dá)式 (Ternary expression)?“三元 (Ternary)” 表示什么意思? 什么是 "use strict"; ? 使用它的好處和壞處分別是什么?

"use strict" 告訴js運(yùn)行時(shí)以嚴(yán)格模式執(zhí)行javascript語(yǔ)句
使js以更安全的方式執(zhí)行,對(duì)某些行為直接報(bào)錯(cuò)

請(qǐng)實(shí)現(xiàn)一個(gè)遍歷至 100 的 for loop 循環(huán),在能被 3 整除時(shí)輸出 "fizz",在能被 5 整除時(shí)輸出 "buzz",在能同時(shí)被 3 和 5 整除時(shí)輸出 "fizzbuzz"。
for(let i=1;i<=100;i++){
    let word = ""
    if(i % 3 ==0){
        word += "fizz"
    }
    if(i % 5 ==0){
        word += "buzz"
    }
    if(word){
        console.log(word)
    }
}
為何通常會(huì)認(rèn)為保留網(wǎng)站現(xiàn)有的全局作用域 (global scope) 不去改變它,是較好的選擇? 為何你會(huì)使用 load 之類(lèi)的事件 (event)?此事件有缺點(diǎn)嗎?你是否知道其他替代品,以及為何使用它們? 請(qǐng)解釋什么是單頁(yè)應(yīng)用 (single page app), 以及如何使其對(duì)搜索引擎友好 (SEO-friendly)。

單頁(yè)應(yīng)用是指所有的資源交互都放在一個(gè)頁(yè)面,而不是交互的時(shí)候跳轉(zhuǎn)到另一個(gè)頁(yè)面。
使用ssr服務(wù)端渲染。

你使用過(guò) Promises 及其 polyfills 嗎? 請(qǐng)寫(xiě)出 Promise 的基本用法(ES6)。
new Promise(resolve,reject)
Promise.resolve
Promise.reject
使用 Promises 而非回調(diào) (callbacks) 優(yōu)缺點(diǎn)是什么?

將回調(diào)轉(zhuǎn)換成鏈?zhǔn)秸{(diào)用

使用一種可以編譯成 JavaScript 的語(yǔ)言來(lái)寫(xiě) JavaScript 代碼有哪些優(yōu)缺點(diǎn)? 你使用哪些工具和技術(shù)來(lái)調(diào)試 JavaScript 代碼?

console.log
debuger

你會(huì)使用怎樣的語(yǔ)言結(jié)構(gòu)來(lái)遍歷對(duì)象屬性 (object properties) 和數(shù)組內(nèi)容?

array array.foreach
object for var i in xx i是字符串

請(qǐng)解釋可變 (mutable) 和不變 (immutable) 對(duì)象的區(qū)別。

mutable
imuutable表示對(duì)象創(chuàng)建后就不再變化

請(qǐng)舉出 JavaScript 中一個(gè)不變性對(duì)象 (immutable object) 的例子? 不變性 (immutability) 有哪些優(yōu)缺點(diǎn)?

可以比較對(duì)象,線程安全
缺點(diǎn)就是費(fèi)內(nèi)存

如何用你自己的代碼來(lái)實(shí)現(xiàn)不變性 (immutability)? 請(qǐng)解釋同步 (synchronous) 和異步 (asynchronous) 函數(shù)的區(qū)別。

同步是指順序執(zhí)行,會(huì)有阻塞
異步是指函數(shù)立即執(zhí)行并返回

什么是事件循環(huán) (event loop)?

主線程運(yùn)行的時(shí)候,產(chǎn)生堆(heap)和棧(stack),棧中的代碼調(diào)用各種外部API,它們?cè)?任務(wù)隊(duì)列"中加入各種事件(click,load,done)。只要棧中的代碼執(zhí)行完畢,主線程就會(huì)去讀取"任務(wù)隊(duì)列",依次執(zhí)行那些事件所對(duì)應(yīng)的回調(diào)函數(shù)。

請(qǐng)問(wèn)調(diào)用棧 (call stack) 和任務(wù)隊(duì)列 (task queue) 的區(qū)別是什么?

javascript中的所有任務(wù)分為兩類(lèi),
一類(lèi)是同步任務(wù),另一種是一部任務(wù)。
所有的同步任務(wù)都在主線程上執(zhí)行,
當(dāng)同步任務(wù)執(zhí)行完在執(zhí)行異步任務(wù)。

call stack 指主線線程執(zhí)行任務(wù)的地方,當(dāng)調(diào)用棧為空的時(shí)候,
會(huì)去輪詢(xún)task queue,然后將隊(duì)列里的任務(wù)加入棧中執(zhí)行
tast queue 按照包含一系列任務(wù)的隊(duì)列

解釋 function foo() {} 與 var foo = function() {} 用法的區(qū)別

第一個(gè)表示生成一個(gè)命名的函數(shù)
第二個(gè)表示生成一個(gè)匿名函數(shù) ,并賦值給foo

What are the differences between variables created using let, var or const?

let var const都表示申明一個(gè)變量

var的作用于是函數(shù)體的全部,會(huì)發(fā)生作用于提升
let,const是塊級(jí)作用域
let表示可以被多次賦值
const表示只能被一次賦值

{} + {}

js的加法只有兩種

字符串和字符串的相加

數(shù)字和數(shù)字的相加

加法運(yùn)算會(huì)觸發(fā)三種轉(zhuǎn)換

原始值

數(shù)字

字符串

> [] + []
""
//[].toString()為空字符串,空字符串相加

> [] + {}
"[object Object]"

> {} + {}
"NaN" 
// 火狐下為NaN 因?yàn)榈谝粋€(gè)對(duì)象當(dāng)作空代碼塊,實(shí)際執(zhí)行為 +{}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/101234.html

相關(guān)文章

  • 基本方法筆記 - 收藏集 - 掘金

    摘要:探討判斷橫豎屏的最佳實(shí)現(xiàn)前端掘金在移動(dòng)端,判斷橫豎屏的場(chǎng)景并不少見(jiàn),比如根據(jù)橫豎屏以不同的樣式來(lái)適配,抑或是提醒用戶(hù)切換為豎屏以保持良好的用戶(hù)體驗(yàn)。 探討判斷橫豎屏的最佳實(shí)現(xiàn) - 前端 - 掘金在移動(dòng)端,判斷橫豎屏的場(chǎng)景并不少見(jiàn),比如根據(jù)橫豎屏以不同的樣式來(lái)適配,抑或是提醒用戶(hù)切換為豎屏以保持良好的用戶(hù)體驗(yàn)。 判斷橫豎屏的實(shí)現(xiàn)方法多種多樣,本文就此來(lái)探討下目前有哪些實(shí)現(xiàn)方法以及其中的優(yōu)...

    maochunguang 評(píng)論0 收藏0
  • js&jq面試筆記(上)

    摘要:確定離開(kāi)和操作的用法實(shí)例操作符判斷基本數(shù)據(jù)類(lèi)型檢測(cè)對(duì)象的繼承關(guān)系,左操作數(shù)是對(duì)象,右操作數(shù)是構(gòu)造函數(shù)可以準(zhǔn)確判斷左對(duì)象是右對(duì)象的實(shí)例頁(yè)面的三種彈窗警告框確認(rèn)框提示框請(qǐng)指出和的區(qū)別共同點(diǎn)這兩種事件都代表的是頁(yè)面文檔加載時(shí)觸發(fā)。 js&jq涉及內(nèi)容眾多,分為上下兩部分進(jìn)行整理,該部分為上部分。 1、對(duì)前端工程師這個(gè)職位你是怎么樣理解的? 前端是最貼近用戶(hù)的程序員,前端的能力就是能讓產(chǎn)品...

    SoapEye 評(píng)論0 收藏0
  • JS筆記

    摘要:從最開(kāi)始的到封裝后的都在試圖解決異步編程過(guò)程中的問(wèn)題。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。異步編程入門(mén)的全稱(chēng)是前端經(jīng)典面試題從輸入到頁(yè)面加載發(fā)生了什么這是一篇開(kāi)發(fā)的科普類(lèi)文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門(mén)教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...

    rottengeek 評(píng)論0 收藏0
  • 前端面試知識(shí)點(diǎn)目錄整理

    摘要:寫(xiě)在前面金三銀四又到了一年一度的跳槽季相信大家都在準(zhǔn)備自己面試筆記我也針對(duì)自己工作中所掌握或了解的一些東西做了一個(gè)目錄總結(jié)方便自己復(fù)習(xí)詳細(xì)內(nèi)容會(huì)在之后一一對(duì)應(yīng)地補(bǔ)充上去有些在我的個(gè)人主頁(yè)筆記中也有相關(guān)記錄這里暫且放一個(gè)我的面試知識(shí)點(diǎn)目錄大家 寫(xiě)在前面: 金三銀四, 又到了一年一度的跳槽季, 相信大家都在準(zhǔn)備自己面試筆記, 我也針對(duì)自己工作中所掌握或了解的一些東西做了一個(gè)目錄總結(jié),方便自...

    xzavier 評(píng)論0 收藏0
  • 前端面試知識(shí)點(diǎn)目錄整理

    摘要:寫(xiě)在前面金三銀四又到了一年一度的跳槽季相信大家都在準(zhǔn)備自己面試筆記我也針對(duì)自己工作中所掌握或了解的一些東西做了一個(gè)目錄總結(jié)方便自己復(fù)習(xí)詳細(xì)內(nèi)容會(huì)在之后一一對(duì)應(yīng)地補(bǔ)充上去有些在我的個(gè)人主頁(yè)筆記中也有相關(guān)記錄這里暫且放一個(gè)我的面試知識(shí)點(diǎn)目錄大家 寫(xiě)在前面: 金三銀四, 又到了一年一度的跳槽季, 相信大家都在準(zhǔn)備自己面試筆記, 我也針對(duì)自己工作中所掌握或了解的一些東西做了一個(gè)目錄總結(jié),方便自...

    enda 評(píng)論0 收藏0
  • 2018.11.19秋招末第二波前端實(shí)習(xí)/校招小結(jié)

    摘要:背景個(gè)人背景就讀于東北某普通二本院校計(jì)算機(jī)軟件工程專(zhuān)業(yè),現(xiàn)大四,北京實(shí)習(xí)前端方向,自學(xué),技術(shù)棧時(shí)間背景大概是在月日準(zhǔn)備好簡(jiǎn)歷開(kāi)始投遞秋招差不多已經(jīng)結(jié)束招聘崗位不多,投遞對(duì)象為大一些的互聯(lián)網(wǎng)公司事件背景第一個(gè)入職的是好未來(lái)的前端實(shí)習(xí)崗,待遇工 背景 個(gè)人背景 就讀于東北某普通二本院校計(jì)算機(jī)軟件工程專(zhuān)業(yè),現(xiàn)大四,北京實(shí)習(xí) 前端方向,自學(xué),vue技術(shù)棧 時(shí)間背景 大概是在11月9日準(zhǔn)備...

    suxier 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Dogee

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<