javascript函数问题

juedi01 2019-03-11 07:29:07

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应该是个对象,作用域应该在函数内,为什么可以做返回值?希望高手解答一下。
...全文
138 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
juedi01 2019-03-12
  • 打赏
  • 举报
回复
引用 1 楼 haOyUe_1 的回复:
1、b是一个json字符串 强行用function的方式把字符串转为对象 效果等同于 var a = JSON.parse(b) 2、对象也是数据类型 当然可以return ,外部调用这个函数就可以获得a 3、这段代码不怎么样 没有实际用途 不用过多关注
您好,a如果是个对象的话它的作用域不应该是在这个函数内吗,函数执行完成之后a就应该销毁了吧?
麦草CMS 2019-03-12
  • 打赏
  • 举报
回复
js 创建函数的一种方式。你去看看js的基础,尤其函数的相关的章节
南风吹过去 2019-03-12
  • 打赏
  • 举报
回复
var c = processMessageData(“xxx”) 可以理解为一个简单的闭包,c就是函数中return的a, c可以获取或调用a的全部属性方法。不仅可以return 一个对象 也可以return函数(return function(){}),一样可以获取函数的上下文作用域。 建议看看闭包的概念。
漠子凉 2019-03-11
  • 打赏
  • 举报
回复
刚刚按错了键盘,提交了回答 我们从代码的优先执行顺序来解剖 (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
漠子凉 2019-03-11
  • 打赏
  • 举报
回复
我们从代码的优先执行顺序来解剖 (new Function("return " + $("#" + b.id).val()))() ( 2 * (2 + 2) ) * (0)
南风吹过去 2019-03-11
  • 打赏
  • 举报
回复
1、b是一个json字符串 强行用function的方式把字符串转为对象 效果等同于 var a = JSON.parse(b) 2、对象也是数据类型 当然可以return ,外部调用这个函数就可以获得a 3、这段代码不怎么样 没有实际用途 不用过多关注

87,990

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧