JavaScriptではnew Functionを使って文字列スティッチング式を実行します.


作者@zwhu原文章@github
最近はnodeで爬虫類を書いています.アナログ登録ともいいます.あるサイトが戻ってきたHTMLに作成ページtokenのスクリプトを挿入しました.
このHTMLの構造は大体似ています.


    
    
        
(function (w) { w.token = (function () { // .... // token return token; })();; })(window);

首先拿到这个页面,然后获取script标签的表达式字符串,剩下的事就是怎样执行表达式字符串,并获取token。

在此处的情景中用eval也是挺不错的选择,但是既然 JS 不推荐这种用法,那我们就换成 new Function 来做。

看下 new Function 的用法如下

new Function ([arg1[, arg2[, ...argN]],] functionBody)
new Functionは関数を返します.例えばfn = new Function('a', 'b', 'return a + b')は、関数オブジェクトを返します.
fn = function(a, b) {
    return a + b
}
そして、new Functionを使用して取得した表現を実行してtokenに戻ります.
    fn = new Function('window', functionBody + ';return window.token')
    var token = fn({})
    console.log(token)
作成したこの関数は、関数体の中ですぐに式を実行するためのパラメータとして、最も内側の関数に導入されます.だから最後に実行する時return window.tokenはtokenの内容を獲得します.