不需要在javascript的参数中声明类型?

不需要在javascript的参数中声明类型?,javascript,function,parameters,callback,arguments,Javascript,Function,Parameters,Callback,Arguments,我在学习javascript时注意到,它不需要像java那样在函数的参数中声明类型。编译器如何知道传递的是什么类型?有任何类型检查吗?假设我的函数处理数字而不是字符串,我传递一个字符串 通常在javascript中,您不需要在参数中指定要传递的函数吗?再说一遍,编译器是如何知道的 function invokeAdd(a,b){ return a()+b(); } JavaScript不需要知道您正在传递什么类型的参数 JS是一种“动态类型化”语言,这意味着它可以在运行时找出类型 在您给出的示

我在学习javascript时注意到,它不需要像java那样在函数的参数中声明类型。编译器如何知道传递的是什么类型?有任何类型检查吗?假设我的函数处理数字而不是字符串,我传递一个字符串

通常在javascript中,您不需要在参数中指定要传递的函数吗?再说一遍,编译器是如何知道的

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有类型强制这在我看来是一个有效的问题。为什么要进行否决投票?神秘的否决投票人,介意评论一下我错了什么吗?发布的所有四个句子都是有效的解释,但它们更适合作为注释而不是答案。代码示例现在对您的句子进行了补充。删除否决票。下面是更实用的方法