Jsfiddle代码是有效的,但不会运行

Jsfiddle code is valid, but will not run

本文关键字:运行 代码 有效 Jsfiddle      更新时间:2023-09-26

我修改了之前有问题的代码,修复了所有的错误,并在不同的"lint"站点上多次检查。只是为了确保代码在JShint中工作,我单击了JShint,并被告知一切都是有效的,但是,当我单击按钮这样做时,不会运行。创建链接的示例代码:

    (function (g) { "use strict"; //g = game
g = this[g] = function () {
    var answer;
    //pre game
    answer = prompt(g.msg[0]); //instruction prompt asks if youve played game
    if (answer === 'no') {

等等。http://jsfiddle.net/ShiiFtyyMendoza/NsVvU/12/

当尝试在jsFiddle上运行此命令时,我在控制台中看到的错误是:Uncaught TypeError: Cannot set property 'zork_clone' of undefined

字符串'zork_clone'只存在于代码中的两个地方;函数名在第95行执行,字符串在第92行传入模块。

跟踪该参数,我们看到从第2行抛出的错误:g = this[g] = function () {,它告诉我在执行该代码时this是未定义的。

我相信在你的情况下,this是未定义的,因为你是在一个"自执行匿名函数"的范围内执行,而不是使用new关键字声明的对象。

我可以在页面中看到两个问题

onload事件问题
您的fiddle脚本设置为在onload事件后执行,但在您的脚本中,您又注册了另一个onload处理程序。
要修复这个问题,请在左面板的Frameworks & Extensions下的第二个选择字段中选择No Wrap - in <body>

匿名函数问题
从我所能理解的是,你正试图在全局范围内(即window)创建一个具有变量名称的函数(在这种情况下,函数名称为zork_clone)。但是您在内部函数中使用strict模式。这里你需要的是this指向window对象,这是正常情况,如果你不使用strict模式,这在strict模式下改变。正如您在严格模式下可以发现的那样,this必须是显式的,否则它将具有值undefined,这就是在您的情况下发生的情况。
修复是使用window全局变量而不是在匿名函数中使用this

演示:小提琴