摘要:將單個事件綁定在父對象上,利用冒泡機制監(jiān)聽來自子元素的事件。事件目標當?shù)竭_目標元素之后,執(zhí)行目標元素該事件相應的處理函數(shù)。函數(shù)對象當使用去調(diào)用構造函數(shù)時,相當于執(zhí)行了原型對象上都有個預定義的屬性,用來引用它的函數(shù)對象。
請解釋事件代理 (event delegation)。
將單個事件綁定在父對象上,利用冒泡機制,監(jiān)聽來自子元素的事件。
優(yōu)點:解決子元素增加刪除時候的事件處理,防止內(nèi)存泄漏
事件捕獲:當某個元素觸發(fā)某個事件(如onclick),頂層對象document就會發(fā)出一個事件流,隨著DOM樹的節(jié)點向目標元素節(jié)點流去,直到到達事件真正發(fā)生的目標元素。在這個過程中,事件相應的監(jiān)聽函數(shù)是不會被觸發(fā)的。
事件目標:當?shù)竭_目標元素之后,執(zhí)行目標元素該事件相應的處理函數(shù)。如果沒有綁定監(jiān)聽函數(shù),那就不執(zhí)行。
事件起泡:從目標元素開始,往頂層元素傳播。途中如果有節(jié)點綁定了相應的事件處理函數(shù),這些函數(shù)都會被一次觸發(fā)。如果想阻止事件起泡,可以使用e.stopPropagation()(Firefox)或者e.cancelBubble=true(IE)來組織事件的冒泡傳播。
請解釋 JavaScript 中 this 是如何工作的。stackoverflow
在全局環(huán)境時
// this 表示window function f(){ return this //也是window }
放在object方法里面時
this綁定到包含他的對象
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
即使你隱式的添加方法到對象,this仍然指向
立即父對象
var obj1 = { name: "obj1", } function returnName() { return this + ":" + this.name; } obj1.f = returnName; //add method to object document.write(obj1.f()); //[object Object]:obj1
當調(diào)用一個無上下問的函數(shù)
當函數(shù)調(diào)用沒有包含上下文,this將綁定到global對象
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
當使用在構造函數(shù)時
即使用new關鍵字時,this指向剛創(chuàng)建的對象
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
當內(nèi)部對象定義在原型鏈時
當一個方法定義在對象原型鏈,this指向調(diào)用該方法的對象
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 [, ...]]]]) 設置this函數(shù)并執(zhí)行 fun.bind(obj1 [, arg1 [, arg2 [,arg3 [, ...]]]]) 設置this
this在事件處理上
如果函數(shù)在eventHandler和onclick直接被調(diào)用 this指向元素(currentTarget)
否則執(zhí)行window
請解釋原型繼承 (prototypal inheritance) 的原理。Using `this` "directly" inside event handler or event property
Using `this` "indirectly" inside event handler or event property
IE only:
當定義一個函數(shù)對象的時候,會包含一個預定義的屬性,叫prototype,這就屬性稱之為原型對象。
function F(){}; console.log(F.prototype) //F.prototype包含 //contructor構造函數(shù)
JavaScript在創(chuàng)建對象的時候,都會有一個[[proto]]的內(nèi)置屬性,用于指向創(chuàng)建它的函數(shù)對象的prototype。原型對象也有[[proto]]屬性。因此在不斷的指向中,形成了原型鏈。
//函數(shù)對象 function F(){}; F.prototype = { hello : function(){} }; var f = new F(); console.log(f.__proto__)
當使用new去調(diào)用構造函數(shù)時,相當于執(zhí)行了
var o = {}; o.__proto__ = F.prototype; F.call(o);
原型對象prototype上都有個預定義的constructor屬性,用來引用它的函數(shù)對象。這是一種循環(huán)引用。
function F(){}; F.prototype.constructor === F;
( new Foo ).__proto__ === Foo.prototype ( new Foo ).prototype === undefined
__proto__真正的原型鏈
prototype只存在與構造函數(shù)中
沒有加括號
要做哪些改動使它變成 IIFE? 描述以下變量的區(qū)別:null,undefined 或 undeclared? 該如何檢測它們?null===null undefined === undefined什么是閉包 (closure),如何使用它,為什么要使用它?
函數(shù)閉包(function closures),是引用了自由變量的函數(shù)。這個被引用的自由變量將和這個函數(shù)一同存在,即使已經(jīng)離開了創(chuàng)造它的環(huán)境也不例外
請舉出一個匿名函數(shù)的典型用例?回調(diào)
你是如何組織自己的代碼?是使用模塊模式,還是使用經(jīng)典繼承的方法? 請指出 JavaScript 宿主對象 (host objects) 和原生對象 (native objects) 的區(qū)別? 請指出以下代碼的區(qū)別:function Person(){}、var person = Person()、var person = new Person()? .call 和 .apply 的區(qū)別是什么?apply 第二個參數(shù)是數(shù)組
call 第二個以后的可變參數(shù)
寫script
請指出瀏覽器特性檢測,特性推斷和瀏覽器 UA 字符串嗅探的區(qū)別? 請盡可能詳盡的解釋 Ajax 的工作原理。XMLHttpRequest
使用 Ajax 都有哪些優(yōu)劣? 請解釋 JSONP 的工作原理,以及它為什么不是真正的 Ajax。通過在網(wǎng)頁中加入script標簽,是瀏覽器通過get方式加載一段js代碼
你使用過 JavaScript 模板系統(tǒng)嗎? 如有使用過,請談談你都使用過哪些庫? 請解釋變量聲明提升 (hoisting)。通過 var 聲明的變量在代碼執(zhí)行之前被js引擎提升到了當前作用域的頂部
請描述事件冒泡機制 (event bubbling)。一個事件被觸發(fā),會發(fā)生先捕獲后冒泡的行為。
冒泡機制指一個事件從發(fā)生元素開始先父元素傳遞,直到達到根元素
js dom 對象擁有的property,property有很多類型
attribute是指html擁有的特性,類型是字符串
DomContentLoaded事件發(fā)生在domcument對象被初始化完成,css,圖片和frame還沒被加載的時候
load事件表示資源被全部加載
== 和 === 有什么不同?==會發(fā)生類型轉換
===不會發(fā)生類型轉換
同源策略限制從一個源加載的文檔或腳本如何與來自另一個源的資源進行交互
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
[1,2,3,4,5].duplicator(); // [1,2,3,4,5,1,2,3,4,5] Arrry.prototype.duplicator = function(){ return this.concat(this) }什么是三元表達式 (Ternary expression)?“三元 (Ternary)” 表示什么意思? 什么是 "use strict"; ? 使用它的好處和壞處分別是什么?
"use strict" 告訴js運行時以嚴格模式執(zhí)行javascript語句
使js以更安全的方式執(zhí)行,對某些行為直接報錯
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) } }為何通常會認為保留網(wǎng)站現(xiàn)有的全局作用域 (global scope) 不去改變它,是較好的選擇? 為何你會使用 load 之類的事件 (event)?此事件有缺點嗎?你是否知道其他替代品,以及為何使用它們? 請解釋什么是單頁應用 (single page app), 以及如何使其對搜索引擎友好 (SEO-friendly)。
單頁應用是指所有的資源交互都放在一個頁面,而不是交互的時候跳轉到另一個頁面。
使用ssr服務端渲染。
new Promise(resolve,reject) Promise.resolve Promise.reject使用 Promises 而非回調(diào) (callbacks) 優(yōu)缺點是什么?
將回調(diào)轉換成鏈式調(diào)用
使用一種可以編譯成 JavaScript 的語言來寫 JavaScript 代碼有哪些優(yōu)缺點? 你使用哪些工具和技術來調(diào)試 JavaScript 代碼?console.log
debuger
array array.foreach
object for var i in xx i是字符串
mutable
imuutable表示對象創(chuàng)建后就不再變化
可以比較對象,線程安全
缺點就是費內(nèi)存
同步是指順序執(zhí)行,會有阻塞
異步是指函數(shù)立即執(zhí)行并返回
主線程運行的時候,產(chǎn)生堆(heap)和棧(stack),棧中的代碼調(diào)用各種外部API,它們在"任務隊列"中加入各種事件(click,load,done)。只要棧中的代碼執(zhí)行完畢,主線程就會去讀取"任務隊列",依次執(zhí)行那些事件所對應的回調(diào)函數(shù)。
請問調(diào)用棧 (call stack) 和任務隊列 (task queue) 的區(qū)別是什么?javascript中的所有任務分為兩類,
一類是同步任務,另一種是一部任務。
所有的同步任務都在主線程上執(zhí)行,
當同步任務執(zhí)行完在執(zhí)行異步任務。
call stack 指主線線程執(zhí)行任務的地方,當調(diào)用棧為空的時候,
會去輪詢task queue,然后將隊列里的任務加入棧中執(zhí)行
tast queue 按照包含一系列任務的隊列
第一個表示生成一個命名的函數(shù)
第二個表示生成一個匿名函數(shù) ,并賦值給foo
let var const都表示申明一個變量
var的作用于是函數(shù)體的全部,會發(fā)生作用于提升
let,const是塊級作用域
let表示可以被多次賦值
const表示只能被一次賦值
js的加法只有兩種
字符串和字符串的相加
數(shù)字和數(shù)字的相加
加法運算會觸發(fā)三種轉換
原始值
數(shù)字
字符串
> [] + [] "" //[].toString()為空字符串,空字符串相加 > [] + {} "[object Object]" > {} + {} "NaN" // 火狐下為NaN 因為第一個對象當作空代碼塊,實際執(zhí)行為 +{}
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/101234.html
摘要:探討判斷橫豎屏的最佳實現(xiàn)前端掘金在移動端,判斷橫豎屏的場景并不少見,比如根據(jù)橫豎屏以不同的樣式來適配,抑或是提醒用戶切換為豎屏以保持良好的用戶體驗。 探討判斷橫豎屏的最佳實現(xiàn) - 前端 - 掘金在移動端,判斷橫豎屏的場景并不少見,比如根據(jù)橫豎屏以不同的樣式來適配,抑或是提醒用戶切換為豎屏以保持良好的用戶體驗。 判斷橫豎屏的實現(xiàn)方法多種多樣,本文就此來探討下目前有哪些實現(xiàn)方法以及其中的優(yōu)...
摘要:確定離開和操作的用法實例操作符判斷基本數(shù)據(jù)類型檢測對象的繼承關系,左操作數(shù)是對象,右操作數(shù)是構造函數(shù)可以準確判斷左對象是右對象的實例頁面的三種彈窗警告框確認框提示框請指出和的區(qū)別共同點這兩種事件都代表的是頁面文檔加載時觸發(fā)。 js&jq涉及內(nèi)容眾多,分為上下兩部分進行整理,該部分為上部分。 1、對前端工程師這個職位你是怎么樣理解的? 前端是最貼近用戶的程序員,前端的能力就是能讓產(chǎn)品...
摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。異步編程入門的全稱是前端經(jīng)典面試題從輸入到頁面加載發(fā)生了什么這是一篇開發(fā)的科普類文章,涉及到優(yōu)化等多個方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結思考,循序漸進的理解 TypeScript。 網(wǎng)絡基礎知識之 HTTP 協(xié)議 詳細介紹 HTT...
摘要:寫在前面金三銀四又到了一年一度的跳槽季相信大家都在準備自己面試筆記我也針對自己工作中所掌握或了解的一些東西做了一個目錄總結方便自己復習詳細內(nèi)容會在之后一一對應地補充上去有些在我的個人主頁筆記中也有相關記錄這里暫且放一個我的面試知識點目錄大家 寫在前面: 金三銀四, 又到了一年一度的跳槽季, 相信大家都在準備自己面試筆記, 我也針對自己工作中所掌握或了解的一些東西做了一個目錄總結,方便自...
摘要:寫在前面金三銀四又到了一年一度的跳槽季相信大家都在準備自己面試筆記我也針對自己工作中所掌握或了解的一些東西做了一個目錄總結方便自己復習詳細內(nèi)容會在之后一一對應地補充上去有些在我的個人主頁筆記中也有相關記錄這里暫且放一個我的面試知識點目錄大家 寫在前面: 金三銀四, 又到了一年一度的跳槽季, 相信大家都在準備自己面試筆記, 我也針對自己工作中所掌握或了解的一些東西做了一個目錄總結,方便自...
摘要:背景個人背景就讀于東北某普通二本院校計算機軟件工程專業(yè),現(xiàn)大四,北京實習前端方向,自學,技術棧時間背景大概是在月日準備好簡歷開始投遞秋招差不多已經(jīng)結束招聘崗位不多,投遞對象為大一些的互聯(lián)網(wǎng)公司事件背景第一個入職的是好未來的前端實習崗,待遇工 背景 個人背景 就讀于東北某普通二本院校計算機軟件工程專業(yè),現(xiàn)大四,北京實習 前端方向,自學,vue技術棧 時間背景 大概是在11月9日準備...
閱讀 1878·2023-04-26 01:58
閱讀 1997·2019-08-30 11:26
閱讀 2739·2019-08-29 12:51
閱讀 3507·2019-08-29 11:11
閱讀 1193·2019-08-26 11:54
閱讀 2109·2019-08-26 11:48
閱讀 3492·2019-08-26 10:23
閱讀 2394·2019-08-23 18:30