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
的情况下声明一个变量,该变量将始终变为全局变量。

脚本
标记中定义的函数位于全局范围内(即浏览器上下文中的
窗口
对象),因此在这种情况下没有区别

在功能块内部,如何