关于函数内部javascript变量的说明
explanation on javascript variables inside a function
我正在学习javascript,遇到了一个主题,其中提到函数中声明的变量可以在函数中的任何位置使用,javascript将变量定义放在首位,如下例所示:
var functionScope=function(){
for (var i=0; i< 10; i++){//code inside this loop}
return i;
}
console.log(functionScope()); //prints 10
javascript实际上把上面的函数变成了下面的:
var functionScope=function(){
var i;
for ( i=0; i< 10; i++){//code inside the for loop}
return i;
}
console.log(functionScope()); //prints 10
由于javascript是一种解释语言,所以它会逐行执行。在尝试访问变量后,它如何知道应该将变量拉到函数的顶部。当它试图访问变量时,它应该告诉undefined
,对吗?
此外,如果我认为变量将被放置在函数的顶部,并且可以在任何地方访问,那么下面的代码应该打印10
,但为什么下面的代码打印undefined
?
var functionScope=function(){
console.log('The value os i is '+i);
var i = 20;
}
console.log(functionScope());
有人能解释一下我的理解哪里错了吗?
还有一个疑问:通常在Java中,如果我必须在for循环之外打印I的值,我会得到一个错误,但在javascript中,变量是否仍然可以在for循环外部访问,就像第一个例子中那样,变量是在for循环内部内联定义的。我是不是遗漏了什么?
var functionScope=function(){
for (var i=0; i< 10; i++);
return i
}
console.log(functionScope()); //prints 10
这只是一个错误的缩进。由于for
末尾的;
,它不将return i
语句包含在循环中。
有一个缩进很好的例子可以帮助你理解真正发生的事情:
var functionScope=function() {
for (var i=0; i< 10; i++)
/* do nothing */;
return i
}
使用var
,可以告诉JS变量不是全局的,它只能在函数内部使用。
使用=
,可以设置变量的值。
CCD_ 9和CCD_。
在第三个示例中,函数中没有i
。在这种情况下,JS将尝试将其作为函数之外的全局变量。如果设置了window.i = 1
,它将打印The value os i is 1
,否则它将生成一个错误,因为i
在任何地方都没有定义。
var i = 0;
var fn = function() {
i = 1; //window.i = 1;
};
console.log(i); //prints 1
var i = 0;
var fn = function() {
var i = 1; //fn.i = 1;
}
console.log(i); //prints 0
var fn = function() {
var i = 1; //fn.i = 1;
}
console.log(i); //ReferenceError: i is not defined
var i;
var fn = function() {
var i = 1; //fn.i = 1;
}
console.log(i) //prints undefined
正如SebastienC.已经告诉您的那样,您的示例代码并没有按照您的意愿执行。for (var i=0; i< 10; i++);
的意思是for (var i=0; i< 10; i++) {/*do nothing*/}
。如果删除;
,您会注意到您的函数将返回0
,因为return
关键字会停止函数,并且它会返回值,不会执行其他操作,您的循环将只运行一次。
此外,您应该使用++i。
Yes Javascript被解释,每当它发现一个已声明/未声明的var时,它就会声明它,然后执行操作,或者从技术角度来说,它会执行var提升。因此,现在变量已声明,但为undefined
。
因此,对其进行的任何操作(除了赋值(都将导致其值仅为undefined
。例如;
{
x++ ;
var x = 10 ;
console.log(x);
}
将打印CCD_ 22。所以你可以把它看作
{
var x = undefined; ''variable hoisted at beginning of block
x++ ;
x = 10 ;
console.log( x ); '' x = 10
}
- 将函数的上下文应用于javascript变量
- 如何通过ajax刷新JSF填充的javascript变量
- Javascript变量赋值|
- 限制javascript变量的最小/最大整数
- 来自文本输入null的html javascript变量
- 访问jsrender模板中的全局javascript变量并更新它
- 从数据库中获取数据并插入JavaScript变量
- 如何将javascript变量传递到Meteor Spacebars模板中
- 将JavaScript变量保存到Rails模型
- 在if语句下的html中使用javascript变量
- Javascript变量分配-按类别
- 操作javascript变量[HTML]以只显示文本
- 无法比较javascript变量
- 如何将smarty变量与javascript变量进行比较
- 如何使用PHP将javascript变量添加到mysql数据库中
- Javascript 变量使用 jquery 查找变量
- 重新加载页面时Javascript变量发生变化
- 在asp classic中使用javascript变量
- 全局Javascript变量变为null
- 如何向服务器端提交javascript变量