未定义的值javascript

时间:2014-06-13 15:52:19

标签: javascript undefined

我尝试使用值运行javascript函数但得到答案值是未定义的。

我想追加这个值

功能运行

myufunc("test msg");

function myufunc(val){
    var script   = document.createElement("script");
    script.type  = "text/javascript";
    script.text  = 'alert(val);';
    document.body.appendChild(script);
}

4 个答案:

答案 0 :(得分:7)

问题

问题是您创建的脚本标记将包含alert(val),但val尚未初始化;它确实存在于你的函数中 - 但是新创建的script-element不知道你指的是val

您可能希望元素最终包含alert("test msg");

function f(val){
  var script   = document.createElement("script");
  script.type  = "text/javascript";
  script.text  = 'alert("' + val + '");';
  document.body.appendChild(script);
}

f ("test msg"); // will create a <script> containing `alert("test msg");`

注意:因为我们手动用双引号包装val的内容,所以要小心,以便传入的值本身不包含< em> double-quote ";这将打破&#34; 生成的&#34;代码。

答案 1 :(得分:1)

首先,“int”是Javascript中的保留字 -

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Reserved_Words

其次,你正在使用“val”,好像它是一个字符串,而不是一个变量。

init("test msg");

function init(val){

var script   = document.createElement("script");
script.type  = "text/javascript";
script.text  = 'alert('+val+');';
document.body.appendChild(script);

}

答案 2 :(得分:1)

int是JavaScript中的保留字,所以绝对不要使用它。这很可能是您的代码无法正常工作的原因。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Reserved_Words

答案 3 :(得分:0)

问题是val仅在myufunc范围内可用,并且当您的脚本被追加时,它将在全局范围内执行,而不是在您的函数范围内执行。因此,val未在全局范围内定义。

解决方案是创建一个全局变量并将其值设置为val,然后在警报中使用全局变量。使用这种方式,不需要将变量连接到字符串中,因此您不会遇到包含引号和断开字符串的变量的问题。

<强> Fiddle

function myufunc(val){
    myValue = val; // create global

    var script   = document.createElement("script");
    script.type  = "text/javascript";
    script.text  = 'alert(myValue);'; // use the global
    document.body.appendChild(script);
}

以下一切都有效:

myufunc('test');
myufunc('tes"t');
myufunc("tes't");