这是因为在JavaScript中,函数的作用域和内联代码的作用域是不同的。当你将代码作为函数的一部分实现时,函数会创建一个新的作用域,而内联代码则是在全局作用域中执行。
在内联代码中,this指向的是当前元素,即执行代码的元素。因此,当你使用this.innerHTML=prompt('Enter a number')时,它会将输入的数字显示在当前元素的innerHTML中。
然而,在函数中,this的值取决于函数是如何被调用的。如果函数是作为对象的方法调用的,this将指向该对象。如果函数是作为普通函数调用的,this将指向全局对象(在浏览器中通常是window对象)。
因此,当你将代码作为函数的一部分实现时,this.innerHTML=prompt('Enter a number')将尝试在函数的作用域中查找名为innerHTML的属性,而不是在当前元素中查找。由于函数的作用域中通常没有名为innerHTML的属性,所以代码无法正常工作。
要解决这个问题,你可以在函数中使用其他变量来引用当前元素,然后通过该变量来设置innerHTML。例如:
function myFunction() {
var element = document.getElementById('myElement');
element.innerHTML = prompt('Enter a number');
}
在这个例子中,我们首先使用document.getElementById('myElement')获取到当前元素,然后将其赋值给变量element。接下来,我们使用element.innerHTML来设置当前元素的innerHTML,从而达到与内联代码相同的效果。
请注意,这只是解决问题的一种方法,具体取决于你的实际需求和代码结构。
领取专属 10元无门槛券
手把手带您无忧上云