2015-07-20 78 views
1

为什么我得到一个ReferenceError:在控制台中找不到变量lang1? 如果lang存在应该不存在太多语言1?...javascript变量显示意外的结果

<body> 
    <input id="datetimepicker" type="text" placeholder="Datetimerpicker"> 
     <input id="lang" type="text" placeholder="language" value="en"><div class="select">select language</div> 

    <script> 
    $(".select").click(function(){ 
     var lang = $('#lang').val(); 
     var lang1 = lang; 
    }); 
    </script> 
</body> 

,不应lang = "en"?我在控制台中获得lang = <input id=​"lang" type=​"text" placeholder=​"language" value="en">​

+0

变量名和id的冲突。 – epascarello

+1

@epascarello我在想,但'lang'变量是本地的函数。 *编辑*哦,等一下我明白你的意思了,是的就是这样。 – Pointy

+0

这就是问题所在,OP在将本地语言当作全球语言对待时, – epascarello

回答

4

如果您想为您的功能使用浏览器调试工具,则必须按照工具的使用方式来执行操作。只需在控制台命令提示符处输入langlang1就不会真正做到你想要的。在这种情况下,符号lang将引用由暗示使用lang作为<input>字段的“id”创建的全局符号。

您可以使用这些工具在您的事件处理程序中设置断点。一个简单的方法是将debugger语句添加到“点击”处理程序的启动:

$(".select").click(function(){ 
    debugger; 
    var lang = $('#lang').val(); 
    var lang1 = lang; 
}); 

从这一点来说,调试工具将提供一个方法可以让你看的变量的值在活动功能(以及让你在那里的功能)。

+0

了解它的第一部分(调试器问题),但不幸的是我的知识不允许我了解如何调试它(我不明白“调试器”的作用,谢谢! –

+0

@PauloJaneiro“调试器”语句会导致浏览器暂停执行,在开发者控制台中,它会告诉你代码暂停的位置,并提供一种方法查看变量等。不同的浏览器提供了不同的工具,但它们通常是相似的。[这里是Google Chrome中工具的介绍。](https://developer.chrome.com/devtools#debugging-javascript)如果没有这些工具工具,就像在黑暗的房间里工作一样! – Pointy

+0

谢谢Pointy! –

3

您不能在控制台中引用langlang1,因为它们位于点击闭合位置。在控制台中定义lang的原因是它将使用与您的变量匹配的任何元素ID。将该变量更改为langX,并且会出现相同的错误。

+0

明白了(一半,真的)。我将ID更改为LangX,现在lang和lang1都返回undefined(按照我的意思)(根据您的建议!) –