var processMessageData = function(b) {
    if (!b) {
        return null 
    }
    if (typeof (b) == "string") {
        b = (new Function("return " + b))()
    }
    if (!b.id) {
        return null 
    }
    var a = (new Function("return " + $("#" + b.id).val()))();
    a.requestFields = b.requestFields || {};
    a.responseFields = b.responseFields || {};
    return a
}今天看到一段代码完全看不明白,上面的 b = (new Function("return " + b))()是什么意思?还有就是a应该是个对象,作用域应该在函数内,为什么可以做返回值?希望高手解答一下。

解决方案 »

  1.   

    1、b是一个json字符串 强行用function的方式把字符串转为对象 效果等同于 var a = JSON.parse(b)
    2、对象也是数据类型 当然可以return ,外部调用这个函数就可以获得a
    3、这段代码不怎么样 没有实际用途 不用过多关注
      

  2.   

    我们从代码的优先执行顺序来解剖
    (new Function("return " + $("#" + b.id).val()))()( 2 * (2 + 2) ) * (0)
      

  3.   

    刚刚按错了键盘,提交了回答我们从代码的优先执行顺序来解剖
    (new Function("return " + $("#" + b.id).val()))()( 2 * (2 + 2) ) * (0)第一步先运行 2 + 2,     所以就是"return " +$("#" + b.id).val(), 假如$("#" + b.id).val()的值为2, 则这个括号的结果为 "return 2"
    第二步2 * (), 所以就是new Funtion("return 2"), 这里的结果就是function() { return 2; }
    第三步() * (0),这一步就是 你刚刚创建的function() { return 2; }, 
    如果我们把它换成一个变量var myFunc = function() { return 2; } 那么我们运行这个myFunc的时候就是  myFunc()
    然后把a 换成function() { return 2; },,得出来的结果就是 function(){ return 2; }()最终的结果就是 function(){ return 2; }() 这个函数会自动运行 得到返回值2
    所以var a = 2最后return a 就是return 2 
      
      

  4.   

    js 创建函数的一种方式。你去看看js的基础,尤其函数的相关的章节
      

  5.   

    var c = processMessageData(“xxx”) 可以理解为一个简单的闭包,c就是函数中return的a, c可以获取或调用a的全部属性方法。不仅可以return 一个对象 也可以return函数(return function(){}),一样可以获取函数的上下文作用域。 建议看看闭包的概念。