Javascript JSFIDLE代码有效,但不会运行

Javascript JSFIDLE代码有效,但不会运行,javascript,jsfiddle,Javascript,Jsfiddle,我修改了以前遇到问题的代码,修复了所有错误,并在不同的“lint”站点上多次检查。 为了确保代码在JSFIDLE中工作,我单击了JShint,并被告知所有内容都是有效的,但是,当我单击按钮执行此操作时,将不会运行所有内容。 创建链接的示例代码: (function (g) { "use strict"; //g = game g = this[g] = function () { var answer; //pre game answer = prompt(g.m

我修改了以前遇到问题的代码,修复了所有错误,并在不同的“lint”站点上多次检查。 为了确保代码在JSFIDLE中工作,我单击了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') {
等等。

在JSFIDLE上尝试运行此操作时,我在控制台中看到的错误是:Uncaught TypeError:无法设置未定义的属性“zork_clone”

字符串“zork_clone”在代码中仅存在于两个位置;第95行中执行的函数名,以及第92行中传递给模块的字符串

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


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

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

加载事件问题
您的fiddle脚本设置为在onload事件之后执行,但在您的脚本中,您再次注册了另一个onload处理程序。
要解决此问题,请在小提琴左面板的
Frameworks&Extensions
下的第二个选择字段中选择
No Wrap-in

匿名函数问题
据我所知,您正试图在全局范围内(即在
窗口中
)创建一个具有变量名的函数(在本例中,函数名为
zork_clone
)但是你在内部函数中使用了
strict
模式。这里你需要的是
this
指向
窗口
对象,这是正常情况,如果你没有使用
strict
模式,这会在
strict
模式中发生变化。在strict模式下
必须是显式的,否则t的值
未定义
,这就是您的情况。
修复方法是在匿名函数中使用
窗口
全局变量,而不是使用

演示:

控制台的答案是:“未捕获类型错误:无法设置未定义的属性‘zork_clone’”