我正在学习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的链接,解释原因
位于函数括号的开头和结尾
为什么可以在声明函数后用 。(dog) 写括号,然后你实际上用参数 调用函数狗
答案 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”或立即调用的函数表达式有很多充分的理由,包括将信息隐藏在其中,但这不是其中之一。