我刚刚阅读了一篇关于Ben Cherry的JavaScript范围和提升的精彩文章,其中他给出了以下示例:
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,浏览器将发出"1"警报.
我仍然不确定它为什么会返回"1".他说的一些事情就像是:所有的功能声明都被提升到顶部.您可以使用函数来调整变量的范围.仍然没有为我点击.
我有两页 - "第1页"和"第2页".在第1页上,有一个文本框,其值为100,最后是一个按钮.
按下按钮我希望javascript将文本框的值保存在全局(?)变量中并跳转到第2页.使用"window.onload"我想要第二个Javascript函数来提醒第1页保存的值.
这是我的Javascript代码:
<script type="text/javascript">
var price; //declare outside the function = global variable ?
function save_price(){
alert("started_1"); //just for information
price = document.getElementById('the_id_of_the_textbox').value;
alert(price); //just for information
}
Run Code Online (Sandbox Code Playgroud)
<script type="text/javascript">
function read_price(){
alert("started_2");
alert(price);
}
Run Code Online (Sandbox Code Playgroud)
在"第1页"我有这个发送按钮:
<input class="button_send" id="button_send" type="submit" value="Submit_price" onclick="save_price();"/>
Run Code Online (Sandbox Code Playgroud)
它启动Javascript函数并将我正确地重定向到我的page2.
但是在第二页上有这个:
window.onload=read_price();
Run Code Online (Sandbox Code Playgroud)
我总是得到全球变量价格的"未定义"值.
我已经阅读了很多关于那些全局变量的内容.例如在这个页面:全局变量的问题..但我不能让它工作......
为什么这不起作用?
首先,让我们看看代码.
var a=0;
b=1;
document.write(a);
function run(){
document.write(b);
var b=1;
}
run();
Run Code Online (Sandbox Code Playgroud)
我认为结果是.01但事实上,结果是0undefined.
然后我修改这段代码.
var a=0;
b=1;
document.write(a);
function run(){
document.write(this.b); //or document.write(window.b)
var b=1;
}
run();
Run Code Online (Sandbox Code Playgroud)
是的,这次它按预期运行.01.我无法理解,为什么?
更有趣的是,我再次修改代码.
var a=0;
b=1;
document.write(a);
function run(){
document.write(b);
//var b=1; //I comment this line
}
run();
Run Code Online (Sandbox Code Playgroud)
结果是01.
那么,任何人都能解释一下吗?
感谢您分享您的观点.我简化了这段代码
b=1;
function run(){
console.log(b); //1
}
Run Code Online (Sandbox Code Playgroud)
二:
b=1;
function run(){
var b=2;
console.log(b); //2
}
Run Code Online (Sandbox Code Playgroud)
三:
b=1;
function run(){
console.log(b); //undefined
var b=2;
}
Run Code Online (Sandbox Code Playgroud) 我被告知javascript变量应该在它们用于函数之前全部出现,这样:
function contrived() {
var myA, myB;
myA = 10;
myB = 20;
return myA + myB;
}
Run Code Online (Sandbox Code Playgroud)
优先:
function furtherContrivance() {
var myA = 10;
var myB = 20;
return myA + myB;
}
Run Code Online (Sandbox Code Playgroud)
是这样的吗?那为什么呢?
JavaScript指南中有一个关于变量范围的句子:"JavaScript中的变量在某种意义上"被提升"或被提升到函数或语句的顶部.但是,未初始化的变量将返回未定义的值."
/**
* Example 2
*/
// will return a value of undefined
var myvar = "my value";
(function() {
console.log(myvar); // undefined
var myvar = "local value";
})();
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么"console.log(myvar);"将返回undefined?我认为第一行已经将myvar初始化为"我的价值".
任何人都可以解释我为什么会得到不同的输出?
代码1:
var a = 1;
function b() {
a = 10;
console.log(a); //output 10
}
b();
console.log(a); //output 10Run Code Online (Sandbox Code Playgroud)
代码2:
var a = 1;
function b() {
a = 10;
console.log(a); //output 10
function a() {}
}
b();
console.log(a); //output 1Run Code Online (Sandbox Code Playgroud)
为什么我在调用函数"b"后得到"a"变量的不同输出?需要一些明确的解释这里真正发生了什么?
我有示例代码:
var t = 20;
function test () {
console.log(t);
var t = 100;
}
test();Run Code Online (Sandbox Code Playgroud)
结果将是undefined.我认为这t是全局变量,为什么,当我记录它时,是undefined吗?
function onMouseClickFunction() {
$mapCanvas.click(function (e) {
var x = cursor.getCursorPositionInCanvasX(e.pageX),
y = cursor.getCursorPositionInCanvasY(e.pageY);
Run Code Online (Sandbox Code Playgroud)
这个例子中的变量范围是函数onMouseclickFunction还是jquery的匿名函数?
我的意思是javascript在其父函数的顶部使用提升创建变量,那么在这个例子中提升的位置是什么?