JavaScript高级函数调用

JavaScript高级函数调用,javascript,Javascript,我正在学习JavaScript,我不理解我读过的JS代码的编写风格。我知道旧的方法,但我并没有找到手册解释这种创建和调用JS函数的方式。新方式: // object var dog = { color: 'brown', size: 'big' }; //function to write dog size (function(dog) { return dog.size; })(dog); 从JavaScript手册中,我了解了旧方法: function prinS

我正在学习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文档的链接,在哪里解释原因

在JS中,代码位于函数的开始和结束括号中

为什么在函数声明后可以用.dog写方括号,这样你就可以用参数dog调用函数了


为了更好地理解这一点,考虑另一种方法来写数字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或立即调用的函数表达式有很多很好的理由,包括在它们内部隐藏信息,但这不是其中之一。

这里没有什么新的,你所做的不是老方法还是新方法。您仍然像往常一样编写函数。第一件事是一个and函数,它可以立即运行。第一个代码什么都不做。我不懂JS代码中的英文是在函数的开始和结束括号中。不管怎么说,你在哪里看到这种新的风格,最好称之为无意义,无所事事的风格?是的,a.k.a.什么都不做。谢谢你的解释,我从来没有听说过IIFEs。
var size = dog.size;