为什么我的变量会改变值?

时间:2013-01-14 16:49:25

标签: javascript jquery

我有一个简单的jsfiddle,其中我得到了div的值。

$(document).ready(function(){})部分,我得到div的文本就好了。当我稍后尝试在函数中使用该值时,值会更改(除非我添加.innerHTML)。为什么该变量的值会发生变化?换句话说,为什么我稍后在调用该变量时需要添加.innerHTML

谢谢!

<div id="my_div">1</div>

// Javascript/JQuery

$(document).ready(function(){ 
    var my_div = $("#my_div").text();

        alert(my_div);

        func();
    });


function func(){    
    alert(my_div); // why does the value change here...why???
        alert(my_div.innerHTML); // why do I need ".innerHTML' here???
};

5 个答案:

答案 0 :(得分:2)

值会发生变化,因为您没有请求div的任何特定“功能”。你只是想提醒一个元素......

在第一位,您已在函数内部分配了my_div。 如果将var my_div移动到函数外部,它将变为全局变量而不是本地变量。

编辑小提琴:here

答案 1 :(得分:2)

因为你声明my_div不在全局范围内。

你应该这样做:

var my_div;
$(document).ready(function(){ 
    my_div = $("#my_div").text();

    alert(my_div);

    func();
});

答案 2 :(得分:2)

这是因为所有具有ID的元素都是默认情况下全局范围的属性。

因此,my_div中的function func()基本上与调用window.my_div相同。

尝试删除var my_div = $("#my_div").text(),您仍然可以在func()中使用它。

此问题与Do DOM tree elements with ids become global variables?

相关

答案 3 :(得分:1)

$(document).ready(function(){ 
var my_div = $("#my_div").text();

    alert(my_div);

    func(my_div);
});


function func(my_div){    
    alert(my_div); // why does the value change here...why???
};

您需要传递对my_div的引用。

答案 4 :(得分:0)

执行以下操作时:

function func(){    
    alert(my_div); // why does the value change here...why???
    alert(my_div.innerHTML); // why do I need ".innerHTML' here???
};

你得到一个html元素的id(my_div) 为什么?因为my_div没有被宣布为全球 这就是为什么当你提醒你得到一个物体时。

尝试使用其他名称将代码运行到my_div,例如:

$(document).ready(function(){ 
    var div = $("#my_div").text();

    alert(my_div);

    func();
});


function func(){
    alert(div);
    alert(div.innerHTML);
};

您会看到收到以下错误:

Uncaught ReferenceError: div is not defined