具有相同名称问题的功能

时间:2018-02-07 06:20:57

标签: javascript function

我正在编写代码来执行两个具有相同名称的函数。我使用两种不同的方法:

方法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;
&#13;
&#13;

方法2:使用简单的function

&#13;
&#13;
<!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;
&#13;
&#13;

  

为什么method1执行这两项功能而method2没有。

1 个答案:

答案 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.