变量变为另一个变量“未定义”

时间:2015-03-20 16:39:20

标签: javascript jquery variables scope undefined

在此代码中,变量" link"给予" undefined"。我不知道原因是什么。这是我的代码:

HTML,第一次尝试:

<html>
    <head>
                <meta charset="utf-8" />
        <script src="js.js"></script>
        <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
    </head>
    <body>
        <p><a onclick="doSom()">Click here!</a></p>
    </body>
</html>

JavaScript(w / jQuery),第一次尝试:

var link;
var testing="Testing this <a href=\""+link+"\">variable</a> here.";
function doSom(){
    link="http://www.google.com";
    $('p').html(testing);
}

HTML,第二次尝试:

<html>
    <head>
        <meta charset="utf-8" />
        <script src="js.js"></script>
        <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
    </head>
    <body>
        <p><a onclick="doSom('www.google.com.br')">Click here!</a></p>
    </body>
</html>

JavaScript(w / jQuery),第二次尝试:

var link;
var testando="Testing this <a href=\""+link+"\">variable</a> here.";
function doSom(link){
    $('p').html(testing);
}

变量&#34; link&#34;没有在上面的代码中给出它的价值,剩下的&#34;未定义&#34;。

这是正常的代码,可行(但我优化了它):

第一次试用HTML;

JavaScript(w / jQuery):

var link;
var testingi="Testing this <a href='";
var testingii="'>variable</a> here.";
function doSom(link){
    $('p').html(testingi+link+testingii);
}

我认为仅仅为一个句子声明2个变量是完全没必要的。

3 个答案:

答案 0 :(得分:2)

您的问题归结为您在初始化之前尝试使用 link变量。< / p>

var link; // By default, this is `undefined`
var testing="Testing this <a href=\""+link+"\">variable</a> here.";
// Your `testing` link will now contain the string `undefined`
function doSom(){
    link="http://www.google.com";
    // Since you don't update `testing` it still has "undefined" in it somewhere
    $('p').html(testing);
}

解决方案:在您初始化testing变量之前,等待构建link链接。

答案 1 :(得分:1)

您在链接有值之前添加链接,因此未定义。之后定义字符串。

见这里:

var link;
 ----  this is empty at definition !!! var testing="Testing this <a href=\""+link+"\">variable</a> here.";
 function doSom(){
 link="http://www.google.com";
$('p').html(testing);
}

这样做:

var link;
var testing;
function doSom(){
link="http://www.google.com";
testing ="Testing this <a href=\""+link+"\">variable</a> here.";
$('p').html(testing);
}

答案 2 :(得分:0)

对于您的代码&#34; tentativa 1&#34;,原因链接未定义是您在分配了要链接的值之前将其插入到字符串测试中。

更改

var link;
var testing="Testing this <a href=\""+link+"\">variable</a> here.";
function doSom(){
    link="http://www.google.com";
    $('p').html(testing);
}

var link;
function doSom(){
    link="http://www.google.com";
var testing="Testing this <a href=\""+link+"\">variable</a> here.";
    $('p').html(testing);
}

它会起作用。

与#34;第二次尝试相同#34;移动你的字符串定义进行测试(并将其重命名为正确),它应该可以正常工作。

我猜测&#34; JavaScript(w / jQuery):&#34;工作正常。

你说得对,你不需要定义那些变量。这不是它在最后一个例子中正常工作的原因。这是因为你指的是&#39;链接&#39;在定义之后。

更好的方法(避免定义无用的变量和引用&#39;链接&#39;在定义之后)将您的html分配更改为:

    link="http://www.google.com";
    $('p').html("Testing this <a href=\""+link+"\">variable</a> here.");

您的主要内容应该是将变量放入字符串中不会保留对变量的引用。包含在字符串中的变量值是最终的。在为其赋值之前,不得将其包含在最终字符串赋值中。