所以我基本上只是想学习javascript ...所以我基本上只是制作函数并测试它们以查看结果。我认为这个代码位应该可行,但它只是返回NaN
...有人可以告诉我我做错了什么吗?
<!DOCTYPE html>
<html>
<body>
<p id = "test"> Hello World</p>
<script>function testFunction(data)
{
var x = data;
var y = 3;
var z = x + y;
function testShow(z)
{
var b = z * x;
return b;
}
return testShow();
}
document.getElementById("test").innerHTML = testFunction(2);
</script>
<button type ="button" onclick ="testFunction()">Click me</button>
</body>
</html>
我还试图在返回document.getElementById
之后放置testShow()
... RIGHT;当我这样做时,我得到了Hello World,但按钮没有返回任何内容或更改Hello World消息......
答案 0 :(得分:3)
当您致电testShow
时,您不会传递任何论据。
这意味着z
(这是testShow
的第一个参数 - 并且掩盖z
的更广范围内的另一个x + y
是{{ 1}}。
undefined
是z * x
,undefined * 2
是显示的内容。
答案 1 :(得分:0)
<!DOCTYPE html>
<html>
<body>
<p id = "test"> Hello World</p>
<button type ="button" onclick ="document.getElementById('test').innerHTML = testFunction(2)">Click me</button>
<script>
function testFunction(data){ // just a structure
var x = data; //2
var y = 3; // 3
var z = x + y; //5
function testShow(aNumber){ // just a structure
var b = aNumber * x; // 5*2 = 10
return b;
}
return testShow(z); // function is executed where aNumber = z
}
</script>
</body>
</html>
您希望避免在嵌套函数中使用相同的变量名,即使它在函数中被覆盖,也会导致混淆。
如果你把z写为testShow的参数,那么它不是var z = x + y
因此最好更改名称
您可以将按钮放在脚本上方,因为在您单击按钮时脚本存在。
或者,您可以使用ES6语法编写函数,并使用this
代替var
,因为一旦您理解它就会更容易阅读。
function testFunction(data){
this.x = data;
this.y = 3;
this.z = x + y;
this.testShow = aNumber => aNumber * this.x;
return this.testShow(this.z);
}
ES5(您正在编写的版本)中的this.testShow
是什么样的
this.testShow = function(aNumber){
return aNumber * this.x;
}.bind(this);
所以你可以看到我们需要写多少额外的两个数字
我创建按钮侦听器的首选方法。
<button id="testButton" type="button">Click me</button>
document.getElementById('testButton').addEventListener('click', function(event){
document.getElementById('test').innerHTML = testFunction(data);
});
现在HTML看起来更漂亮了