为什么这段代码在这里工作,但在 JSFiddle 上不起作用
Why is this code working here but not on JSFiddle
我有一个简单的代码,它没有任何问题,它在这里运行,但不在JSFiddle上运行。在检查控制台时,我发现以下错误
Uncaught ReferenceError: fn is not defined
链接到小提琴
var fn = {
one: function() {
alert('1')
},
two: function() {
alert('2')
},
three: function() {
alert('3')
}
};
<button onclick='fn.one()'>1</button>
<button onclick='fn.two()'>2</button>
<button onclick='fn.three()'>3</button>
这是因为 jsfiddle 在闭包中沙箱化了你的代码。
你可以看到你写了var fn
(它制作了一个本地var),只需删除var
语句以使其全局化,您就可以像现在这样称呼它。
不过,我建议您使用addEventListener()
.
一个JSFiddle功能。 默认情况下,JSFiddle 将所有代码包装在 $(document).ready()
处理程序中。 要让你的JS脱离包装器并回到普通DOM的流程中,只需选择"框架和扩展"下的JSFiddle选项,并将其从"onLoad"更改为"No wrap - in head"或"no wrap - in body"
将 jsfiddle 中的下拉列表从 onLoad 更改为无换行 - 在头部或无换行 - 在正文中。
将左侧的选项从 onLoad
更改为no wrap
之一(即 no wrap - in <head>
或no wrap - in <body>
选项,它可以毫无问题地运行。
jsfiddle 上的这段代码不起作用,因为这就是变量作用域在 JavaScript 中的工作方式。
你可以看到,如果我只改变几个字符
var fn = // the rest of code ...
自
window.fn = // the rest of code ...
您的示例"正确"工作 - http://jsfiddle.net/v3gsmnvq/7/
在 SO 上阅读有关作用域的信息:JavaScript 中变量的作用域是什么?
- JavaScript获胜't运行,但在jsFiddle中工作
- Javascript的某些部分在Chrome中不起作用,但在其他浏览器中可以完美工作
- appendChild在函数外部工作,但在函数内部不工作
- 为什么这个jQuery可以作为一个小提琴工作,但在我的网页上没有
- Var工作,但在使用数组执行相同操作时停止
- jQuery REST会话没有'不工作,但在POSTMan工作
- 我的时间倒计时脚本在谷歌浏览器中工作正常,但在其他浏览器中打开时它显示为南楠
- 引导程序's的javascript在本地工作,但在部署到服务器时不能工作
- javascript代码,用于删除firefox中的空白,但在IE和chrome中无法正常工作
- 无法从IE中的data.responseText获取结果,但在其他浏览器中工作
- 复杂选择器在jQuery 1.8中中断,但在1.7.2中工作
- 意思是.js - 登录后重定向用户 - 在本地工作,但在部署时不起作用
- 火狐中的多个问题,但在 chrome 中工作正常,没有一个问题
- jQuery选择器在脚本中不起作用,但在控制台中工作
- 在键上验证正在工作,但在按键时它不起作用
- blur() 无法以编程方式工作 |但在从用户启动时会这样做
- 在暂存服务器中工作但在生产中失败的无效 URL
- 使用angular-google-maps指令在“grunt服务”期间工作.但在默认的grunt任务期间不会
- 将子项链接到在Chrome中工作但在Internet Explorer中不工作的按钮
- Blob createObjectURL下载在Firefox中不工作(但在调试时工作)