(function)([arg...])

一、 代码以及运行结果

1、

(function a(arg1) {
	console.log(arg1)
})("x");

在这里插入图片描述
2、

(function(arg1) {
	console.log(arg1)
})("xx");

在这里插入图片描述
3、

(function() {
	console.log("1:" + arg1)
}, function b(a) {
	console.log("2:" + arg1)
}, function c(arg1, arg2, arg3) {
	console.log("3:" + arg1)
	console.log("3:" + arg3);
})("xx");

在这里插入图片描述
4、

(function(arg1, arg2) {
	console.log("first");
	arg2();
})("arg1", function() {
	console.log("second");
})

在这里插入图片描述
5、

var res = (function(arg1, arg2) {
	console.log("first");
	arg2();
	return arg2;
})("arg1", function() {
	console.log("second");
	return "second";
});
res();

在这里插入图片描述
6、

//这个语法会报错,因为函数b的定义域中没有a这个函数
(function a(arg1) {
	console.log(arg1);
}, function b(arg1) {
	a(arg1);
})("xxx");

在这里插入图片描述

二、 结论

    1、语法

	js的"()()"语法,第一个括号中可以写具名函数也可以写匿名函数,甚至可以写函数集合目的是定义需要调用的函数,第二个()的作用是给第一个括号中的函数提供实参,它还具有调用前面函数的作用,默认调用的是函数集合中的最后一个函数。

    2、为什么这么做

	首先引入外部js包,需要担心的就是是否会与原有的js中的变量与函数冲突,造成覆盖。故而使用匿名函数放置需要定义的函数,定义函数之后使用([argments...])调用。

双括号语法资料: https://blog.youkuaiyun.com/dataiyangu/article/details/84748259

### 函数隐式声明编译错误的原因 在C/C++程序中遇到`implicit declaration of function`编译警告或错误意味着编译器遇到了未事先声明的函数调用。对于标准库中的函数,如`getopt()`,通常是因为缺少必要的头文件包含语句[^1]。 ### 解决方案一:包含正确的头文件 如果问题是由于缺失了特定的标准库函数定义,则应确保包含了相应的头文件。例如,在使用`getopt()`的情况下: ```c #include <unistd.h> /* 包含 getopt 的定义 */ ``` 这可以防止编译器因找不到该函数原型而发出警告或报错。 ### 解决方案二:处理C和C++混编情况下的名称修饰差异 当涉及到C与C++之间的互操作时,可能会因为两种语言不同的命名约定而导致链接阶段出现问题。为了使C++代码能够正确解析来自C源码的外部符号,可以在适当位置加入如下语法结构来告知编译器保持原始的名字编码方式而不加以修改: ```cpp #ifdef __cplusplus extern "C" { #endif /* C风格的函数声明 */ #ifdef __cplusplus } #endif ``` 此方法适用于任何需要跨语言共享接口的情形,并能有效消除由不同语言特性引起的潜在冲突[^2]。 ### 解决方案三:显式声明未知函数 对于自定义而非标准库内的函数,应当提前对其进行正确定义或至少提供完整的前向声明(即函数签名)。这样不仅有助于提高代码可读性和维护性,也能避免不必要的编译期告警。比如: ```c int myFunction(int arg); // 前置声明 ... myFunction(42); // 正确调用已知函数 ``` 通过上述措施之一或多者组合应用,应该可以彻底解决`implicit declaration of function`这类编译问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值