我正在编写代码来执行两个具有相同名称的函数。我使用两种不同的方法:
方法1:在var
中存储功能
<!DOCTYPE html>
<html>
<body>
<div id="demo1">I am div1.</div>
<div id="demo2">I am div2.</div>
<script>
let x;
var fun1 = function(val1, val2){
x = val1 + val2;
document.getElementById('demo1').innerHTML = x;
}
fun1(2, 2);
var fun1 = function(val1, val2){
x = val1 + val2;
document.getElementById('demo2').innerHTML = x;
}
fun1(1, 1);
</script>
</body>
</html>
&#13;
方法2:使用简单的function
<!DOCTYPE html>
<html>
<body>
<div id="demo1">I am div1.</div>
<div id="demo2">I am div2.</div>
<script>
let x;
function fun1(val1, val2){
x = val1 + val2;
document.getElementById('demo1').innerHTML = x;
}
fun1(2, 2);
function fun1(val1, val2){
x = val1 + val2;
document.getElementById('demo2').innerHTML = x;
}
fun1(1, 1);
</script>
</body>
</html>
&#13;
为什么
method1
执行这两项功能而method2
没有。
答案 0 :(得分:2)
在JavaScript中,函数使用function
关键字定义。
要定义一个函数,可以使用函数声明(方法2)或函数表达式(方法1)。
函数声明hoist the definition。您可以在声明之前使用该功能:
fun1(); // logs "bar"
function fun1() {
console.log('foo');
}
// Both function declarations are hoisted to the top
// The second declaration 'overrides' the first declaration
function fun1() {
console.log('bar');
}
这也意味着fun1
的第二个声明会覆盖第一个声明,因为它们都被悬挂。
但是,函数表达式(方法1)不会被挂起:
fun1(); // TypeError: fun1 is not a function
var fun1 = function() {
console.log('foo');
}
fun1(); // logs 'foo'. the variable fun1 is hoisted, but the function is not.
var fun1 = function() {
console.log('bar');
}
fun1(); // logs 'bar' because fun1 is now assigned to a different function.