成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript 中使用 new Function 執(zhí)行字符串拼接表達(dá)式

qingshanli1988 / 2763人閱讀

摘要:構(gòu)造的這個(gè)函數(shù)有個(gè)形參,作為函數(shù)體中立即執(zhí)行表達(dá)式的實(shí)參傳入最內(nèi)層的函數(shù)中。所以在最后執(zhí)行的時(shí)候便會(huì)獲得的內(nèi)容。

作者 @zwhu
原文章 @github

最近在用 node 學(xué)寫爬蟲,也可以叫模擬登陸,遇到某個(gè)網(wǎng)站在返回的 HTML 中插入了一個(gè)生成頁面token的script。

這個(gè)HTML的結(jié)構(gòu)大概類似



    
    
        

首先拿到這個(gè)頁面,然后獲取script標(biāo)簽的表達(dá)式字符串,剩下的事就是怎樣執(zhí)行表達(dá)式字符串,并獲取token。

在此處的情景中用eval也是挺不錯(cuò)的選擇,但是既然 JS 不推薦這種用法,那我們就換成 new Function 來做。

看下 new Function 的用法如下

new Function ([arg1[, arg2[, ...argN]],] functionBody)

new Function會(huì)返回一個(gè)函數(shù)。例如 fn = new Function("a", "b", "return a + b") 會(huì)返回一個(gè)函數(shù)對(duì)象

fn = function(a, b) {
    return a + b
}

so,我們可以使用 new Function 構(gòu)造一個(gè)函數(shù),用來執(zhí)行獲取到得表達(dá)式,并返回token。

    fn = new Function("window", functionBody + ";return window.token")
    var token = fn({})
    console.log(token)

構(gòu)造的這個(gè)函數(shù)有個(gè)window形參,作為函數(shù)體中立即執(zhí)行表達(dá)式的實(shí)參傳入最內(nèi)層的函數(shù)中。所以在最后執(zhí)行的時(shí)候 return window.token 便會(huì)獲得token 的內(nèi)容。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/86055.html

相關(guān)文章

  • [總結(jié)] js 模板引擎

    摘要:第三部分介紹一種模板引擎,之所以介紹他是因?yàn)?。。。。三?jiǎn)介模板引擎是數(shù)據(jù)與界面分離工作中最重要一環(huán)。是新一代模板引擎,它采用預(yù)編譯方式讓性能有了質(zhì)的飛躍,并且充分利用引擎特性,使得其性能無論在前端還是后端都有極其出色的表現(xiàn)。 嗯,這也是一個(gè)學(xué)習(xí)筆記,材料均來自網(wǎng)絡(luò),有改動(dòng)。。文章主要分為三部分,第一部分通過實(shí)現(xiàn)一個(gè)簡(jiǎn)易的ERB模板引擎來介紹其原理,參考javascript模板引擎和實(shí)現(xiàn)...

    airborne007 評(píng)論0 收藏0
  • javascript模板引擎和實(shí)現(xiàn)原理

    摘要:模板通常用來定義顯示的形式,能夠使得數(shù)據(jù)展現(xiàn)更為豐富,而且容易維護(hù)。從模板引擎的實(shí)現(xiàn)上看,需要依賴編程語言的動(dòng)態(tài)編譯或者動(dòng)態(tài)解釋的特性,以簡(jiǎn)化實(shí)現(xiàn)和提高性能。本文就來實(shí)現(xiàn)一個(gè)簡(jiǎn)易的模板引擎,以展現(xiàn)的強(qiáng)大之處。 模板簡(jiǎn)介 模板通常是指嵌入了某種動(dòng)態(tài)編程語言代碼的文本,數(shù)據(jù)和模板通過某種形式的結(jié)合,可以變化出不同的結(jié)果。模板通常用來定義顯示的形式,能夠使得數(shù)據(jù)展現(xiàn)更為豐富,而且容易維護(hù)。...

    Shihira 評(píng)論0 收藏0
  • JavaScript編碼規(guī)范 1

    摘要:強(qiáng)制參數(shù)和返回值注釋必須包含類型信息和說明。如果重寫的形參個(gè)數(shù)類型順序和返回值類型均未發(fā)生變化,可省略,僅用標(biāo)識(shí),否則仍應(yīng)作完整注釋。 轉(zhuǎn)載:原地址 1 前言 JavaScript在百度一直有著廣泛的應(yīng)用,特別是在瀏覽器端的行為管理。本文檔的目標(biāo)是使JavaScript代碼風(fēng)格保持一致,容易被理解和被維護(hù)。 雖然本文檔是針對(duì)JavaScript設(shè)計(jì)的,但是在使用各種JavaScr...

    jsliang 評(píng)論0 收藏0
  • 前端基礎(chǔ)入門四(JavaScript基礎(chǔ))

    摘要:學(xué)習(xí)目標(biāo)掌握編程的基本思維掌握編程的基本語法我們先來學(xué)習(xí)基礎(chǔ),后續(xù)會(huì)講解高級(jí)。語句基本語法當(dāng)循環(huán)條件為時(shí),執(zhí)行循環(huán)體,當(dāng)循環(huán)條件為時(shí),結(jié)束循環(huán)?;A(chǔ)語法循環(huán)體循環(huán)條件代碼示例初始化變量循環(huán)體自增循環(huán)條件語句和一般用來解決無法確認(rèn)次數(shù)的循環(huán)。 學(xué)習(xí)目標(biāo): 掌握編程的基本思維 掌握編程的基本語法 我們先來學(xué)習(xí)JavaScript基礎(chǔ),后續(xù)會(huì)講解JavaScript高級(jí)。 重點(diǎn)內(nèi)容 變...

    王軍 評(píng)論0 收藏0
  • 前端基礎(chǔ)入門四(JavaScript基礎(chǔ))

    摘要:學(xué)習(xí)目標(biāo)掌握編程的基本思維掌握編程的基本語法我們先來學(xué)習(xí)基礎(chǔ),后續(xù)會(huì)講解高級(jí)。語句基本語法當(dāng)循環(huán)條件為時(shí),執(zhí)行循環(huán)體,當(dāng)循環(huán)條件為時(shí),結(jié)束循環(huán)?;A(chǔ)語法循環(huán)體循環(huán)條件代碼示例初始化變量循環(huán)體自增循環(huán)條件語句和一般用來解決無法確認(rèn)次數(shù)的循環(huán)。 學(xué)習(xí)目標(biāo): 掌握編程的基本思維 掌握編程的基本語法 我們先來學(xué)習(xí)JavaScript基礎(chǔ),后續(xù)會(huì)講解JavaScript高級(jí)。 重點(diǎn)內(nèi)容 變...

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

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

0條評(píng)論

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