JavaScript高级函数调用

时间:2016-09-12 18:36:28

标签: javascript

我正在学习JavaScript,我不理解我读过的JS代码的写法风格。我知道“老”的方式,但我没有找到手册在哪里解释这种风格的创建和调用JS功能。 “新方式”:

// object
var dog = {
    color: 'brown',
    size: 'big'
};

//function to write dog size
(function(dog) {
    return dog.size;
})(dog);

从JavaScript手册我知道(旧方式):

function prinSize(dog) {
    return dog.size
}
console.log(prinSize(dog));

请给我一个JS doc的链接,解释原因

    JS代码中的
  • 位于函数括号的开头和结尾

  • 为什么可以在声明函数后用 。(dog) 写括号,然后你实际上用参数 调用函数狗

1 个答案:

答案 0 :(得分:2)

为了更好地理解这一点,请考虑另一种编写数字1

的方法
(function() { return 1; })()

这样做是定义一个返回1的函数,然后立即执行它,并跟随(),所以整个事情的计算结果为1。

当然,没有理由这样做,我也可以写1

所以要做1+2,我可以写

(function() { return 1; })() + function() { return 1; }()

(我不需要围绕第二个函数的括号,因为它在语法上的位置它只能是一个表达式。)

从同样的意义上说,你的功能

(function(dog) { return dog.size; })(dog)

完全等同于开始编写dog.size。我不知道你在哪里看到这个,但站在它自己的位置,这在两个方面是荒谬的:首先,正如我所说的那样与dog.size相同,其次,它没有做任何事情结果大小 - 实际上对结果做任何事情,你需要写

var size = function(dog) { return dog.size; }();

但是,你也可以写一下

var size = dog.size;

使用这些所谓的“IIFE”或立即调用的函数表达式有很多充分的理由,包括将信息隐藏在其中,但这不是其中之一。