不需要在javascript的参数中声明类型?
我在学习javascript时注意到,它不需要像java那样在函数的参数中声明类型。编译器如何知道传递的是什么类型?有任何类型检查吗?假设我的函数处理数字而不是字符串,我传递一个字符串 通常在javascript中,您不需要在参数中指定要传递的函数吗?再说一遍,编译器是如何知道的不需要在javascript的参数中声明类型?,javascript,function,parameters,callback,arguments,Javascript,Function,Parameters,Callback,Arguments,我在学习javascript时注意到,它不需要像java那样在函数的参数中声明类型。编译器如何知道传递的是什么类型?有任何类型检查吗?假设我的函数处理数字而不是字符串,我传递一个字符串 通常在javascript中,您不需要在参数中指定要传递的函数吗?再说一遍,编译器是如何知道的 function invokeAdd(a,b){ return a()+b(); } JavaScript不需要知道您正在传递什么类型的参数 JS是一种“动态类型化”语言,这意味着它可以在运行时找出类型 在您给出的示
function invokeAdd(a,b){
return a()+b();
}
JavaScript不需要知道您正在传递什么类型的参数 JS是一种“动态类型化”语言,这意味着它可以在运行时找出类型 在您给出的示例中,传入非函数类型将导致错误,因为这两种类型不是函数。(不过,JS在进行各种其他转换时都非常出色) 以下是几个例子:
console.log(“hello”+1);
控制台日志(“2”+1);
console.log(15+true);
设a=(x)=>x+3;
控制台日志(a);
控制台日志(a(1));
控制台日志(a+1)代码>JavaScript不是编译语言;这是一种解释性语言。所以没有静态类型检查
要回答您的一个具体问题:
假设我的函数处理数字而不是字符串,我传递一个字符串
您可以很容易地尝试这一点:
let number=1;
让string=“string”;
让加法=数字+字符串;
控制台日志(添加)代码>要针对您的特定代码块,请查看以下代码
function sumA()
{
return 2;
}
function sumB()
{
return 3;
}
function invokeAdd(a,b){
return a()+b();
}
console.log(invokeAdd(sumA, sumB)); //5
上述代码将导致5。让我们把它们分成几步
当我们第一次调用函数invokeAdd
时,我们传入了两个变量sumA
作为第一个参数,它是a
,而sumB
作为第二个参数,它是b
。现在,invokeAdd
变成如下内容:
return sumA() + sumB()
因此返回5
现在让我们再举一个例子,将参数切换为数字
console.log(invokeAdd(1, 2));
现在,我们调用函数invokeAdd
,并分别传入2个参数,1和2,我们的invokeAdd
已变为
return 1() + 2();
因为1不是一个函数,在它旁边有一个括号,JS引擎将抛出一个错误()表示执行功能
类型错误:a不是函数
如果你想在javascript
中了解更多关于类型的知识,这是一本非常好的书,有详细的解释javascript没有类型(从这个意义上讲)。如果你想进行类型检查,可以使用typescript或flow。javascript有类型强制这在我看来是一个有效的问题。为什么要进行否决投票?神秘的否决投票人,介意评论一下我错了什么吗?发布的所有四个句子都是有效的解释,但它们更适合作为注释而不是答案。代码示例现在对您的句子进行了补充。删除否决票。下面是更实用的方法