Javascript 在js中,什么时候应该将var放在函数前面? var output=function(){console.log('result')} 输出();
如果我改为Javascript 在js中,什么时候应该将var放在函数前面? var output=function(){console.log('result')} 输出();,javascript,Javascript,如果我改为output=function(){console.log('result')它仍然显示正确的结果,因此我的问题是: 他们之间有什么区别?在js中,什么时候应该将var放在函数前面?这与变量前面的var原理相同吗?您处于全局窗口范围内,因此没有区别 变量的类型不重要 如果这是在函数中声明的,则存在差异: <script type="text/javascript"> var output = function() {console.log('result')} outpu
output=function(){console.log('result')代码>它仍然显示正确的结果,因此我的问题是:
他们之间有什么区别?在js中,什么时候应该将var放在函数前面?这与变量前面的var
原理相同吗?您处于全局窗口
范围内,因此没有区别
变量的类型不重要
如果这是在函数中声明的,则存在差异:
<script type="text/javascript">
var output = function() {console.log('result')}
output();
</script>
此处a
将是未定义的,因为var
在函数范围内声明变量
作为练习:
function name(){
var a=1;
}
alert(a);
这会提醒2
而不是1
,因为中间的var
属于函数范围,它与全局范围分开
也可以通过以下方式修改全局变量:
var a=2;
function name(){
var a=1;
}
name();
alert(a);
还可以将其与let
进行比较,后者将其范围限制为块:您位于全局窗口的范围内,因此没有区别
变量的类型不重要
如果这是在函数中声明的,则存在差异:
<script type="text/javascript">
var output = function() {console.log('result')}
output();
</script>
此处a
将是未定义的,因为var
在函数范围内声明变量
作为练习:
function name(){
var a=1;
}
alert(a);
这会提醒2
而不是1
,因为中间的var
属于函数范围,它与全局范围分开
也可以通过以下方式修改全局变量:
var a=2;
function name(){
var a=1;
}
name();
alert(a);
还可以将其与let
进行比较,后者将其范围限制为块:“这与变量前面的var原理相同吗?”
对。输出是一个变量
var A=1;
A=2;
A=A+1;
因此,我建议您在定义它时,在它前面使用var
。您最终可以在不使用变量的情况下更改其值,如:
var a=2;
function name(){
a=3;
}
name();
alert(a);
将函数的“脚本”视为该变量的“值”
var A=1;
A=2;
A=A+1;
(不是建议您这样做,而是向您表明这是100%的var)
实际上,您将“function(){console.log('result')}”的值分配给名为“output”的变量,而不是作为字符串,而是作为执行的脚本。注意末尾的分号,如var A=3代码>
现在,“在”output
中有执行console.log('result')
的代码。(或多或少,只是为了解释一下)
由于您以后通常不会更改相同的函数(您可以,有时也会更改),因此我建议您每次定义这样的函数时,都在前面使用var
,,即使在没有严格必要的情况下,为了安全起见,也不要覆盖现有函数
这与将函数定义为有点不同:
var F=function() {console.log('one')};
// change it later
F=function() {console.log('two')};
这里没有=符号,没有赋值,结尾没有分号。这不是一个变量赋值,而是一个函数“定义”,虽然结果相似,并且可以调用output(),但在这两种情况下都有区别。我认为最主要的一点是,在逐行执行脚本之前,会检查函数定义,而对于赋值,您确实需要先处理赋值行,然后才能使用函数。因此:
function output() {console.log('result')}
工作。而这:
output();
function output() {console.log('result')}
没有。读取和解释赋值指令时,变量被赋值或更改
output(); // nope! output not defined yet!
var output=function() {console.log('result')}
“这与变量前面的var原理相同吗?”
对。输出是一个变量
var A=1;
A=2;
A=A+1;
因此,我建议您在定义它时,在它前面使用var
。您最终可以在不使用变量的情况下更改其值,如:
var a=2;
function name(){
a=3;
}
name();
alert(a);
将函数的“脚本”视为该变量的“值”
var A=1;
A=2;
A=A+1;
(不是建议您这样做,而是向您表明这是100%的var)
实际上,您将“function(){console.log('result')}”的值分配给名为“output”的变量,而不是作为字符串,而是作为执行的脚本。注意末尾的分号,如var A=3代码>
现在,“在”output
中有执行console.log('result')
的代码。(或多或少,只是为了解释一下)
由于您以后通常不会更改相同的函数(您可以,有时也会更改),因此我建议您每次定义这样的函数时,都在前面使用var
,,即使在没有严格必要的情况下,为了安全起见,也不要覆盖现有函数
这与将函数定义为有点不同:
var F=function() {console.log('one')};
// change it later
F=function() {console.log('two')};
这里没有=符号,没有赋值,结尾没有分号。这不是一个变量赋值,而是一个函数“定义”,虽然结果相似,并且可以调用output(),但在这两种情况下都有区别。我认为最主要的一点是,在逐行执行脚本之前,会检查函数定义,而对于赋值,您确实需要先处理赋值行,然后才能使用函数。因此:
function output() {console.log('result')}
工作。而这:
output();
function output() {console.log('result')}
没有。读取和解释赋值指令时,变量被赋值或更改
output(); // nope! output not defined yet!
var output=function() {console.log('result')}
如果没有var
,您的变量将被声明为全局变量,这意味着它也可以在其他JS
文件中使用。简而言之,如果您声明一个变量,而不使用var
,则该变量始终变为全局变量。如果不使用var
您的变量将声明为全局变量,这意味着它也可用于其他JS
文件。简而言之,如果您在不使用var
的情况下声明一个变量,该变量将始终变为全局变量。在脚本
标记中定义的函数位于全局范围内(即浏览器上下文中的窗口
对象),因此在这种情况下没有区别
在功能块内部,如何