这个函数要怎么分析?

不懂这是什么形式

var func = (function(a) {
    this.a = a;
    return function(a) {
        a += this.a;
        return a;
    }
})(function(a, b) {
    return a;
}(1, 2))

func(4) // ?
阅读 1.2k
2 个回答
var func = (function(a) {
    this.a = a;
    return function(a) {
        a += this.a;
        return a;
    }
})(function(a, b) {
    return a;
}(1, 2))

func(4) // ?
///先将这个自动调用函数作为参数传递,这个函数返回传入的第一个参数 a ,这里就是返回 1
function(a, b) {
    return a;
}(1, 2)
(function(a) {
    this.a = a;
    // 当上一次调用时把传入的 1 赋值给了 this.a ,
    // 随即返回了一个回调函数提供给 func(4) 调用,因为 func 传入 了 4 ,
    // 4和上一次调用的 this.a = 1,计算,返回结果 5
    return function(a) {
        a += this.a;
        return a;
    }
})(function(a, b) {
    return a;
}(1, 2))
func(4);

(func{}())这种形式是立即执行func函数

所以你写的这个可以简化成

var func = (function(a) {
    this.a = a;
    return function(a) {
        a += this.a;
        return a;
    }
})(1)

再简化

var func = function(a) {
    a += 1;
    return a;
}

所以
func(4)// 4+1 -> 5

抛开是某些沙雕写出来测验的题目以外,平时写这种代码没见过。

少看骚操作代码,从我做起。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题