如何区别javaScript中定义变量有没有var的区别实例详解

让我们总结一下定义变量时使用或不使用var关键字的区别。
在函数中,使用var声明的变量和不使用var声明的变量是不同的。
使用var声明的变量是局部变量,不使用var声明的变量是全局变量,因此可以使用该变量将界面内容暴露给外界。
使用var语句重复声明语句是合法且无害的。
如果该语句与赋值重复,则与常规赋值语句没有什么不同。
如果你尝试读取未声明的变量,JS将抛出错误。
在JavaScript函数作用域中,声明的变量或内部函数在函数体中可见。
这意味着,该函数可能在定义之前就可用。
定义函数有两种方式,一种是函数定义表达式,另一种是函数声明语句。
函数声明语句被“前推”到外部脚本或外部函数作用域的顶部,因此以这种方式声明的函数可以由声明之前出现的代码调用。
在函数定义表达式中,声明变量是高级的,但给变量赋值并不高级。
因此,在表达式中定义的函数在定义函数之前不能被调用。
1.函数作用域内用var定义的变量是局部变量,不用var定义的变量成为全局变量。
使用var定义:不使用var定义:2.在全局作用域中,用var定义的变量不能被删除,没有用var定义的变量可以被删除。
这意味着隐式全局变量不是真正的变量,这正是它们的本质。
通用对象的属性,因为属性可以通过删除来删除,但变量不能。
3.使用var定义变量也会改进变量声明,即使用var定义:不使用var定义:这是如何声明用var预定义的变量。
4、ES5‘usestrict’模式下,如果没有用var定义变量,会报错。

JavaScript中函数的使用

Function

函数实际上是对象,每个函数都是函数类型的一个实例。
函数通常以函数声明的形式定义。
无需在函数定义末尾添加分号。

functionzss(a1,a2){returna1*a2}

如果我们定义函数的语法是函数表达式,那么函数表达式和函数声明几乎一样。
这里函数末尾有一个分号。

letzss=function(a3,a4){returna3*a4};

我们还可以使用箭头函数来定义函数。
箭头函数定义有点像函数表达式:

letzss=(a5,a6)=>{returna5*a6;};

当箭头函数只有一个参数时,括号可以省略,只要没有参数或者有多个参数,就需要使用括号。
当箭头函数不使用大括号时,箭头后面只能有一行代码。
还有一些场景是不能使用箭头函数的,比如arguments、super和new.target,也不能使用构造函数。
另外,箭头函数没有prototype属性。
如果函数是使用箭头函数语法定义的。
我们传递给函数的参数将无法使用arguments关键字访问,而只能通过定义的命名参数访问。

functionzss(){console.log(arguments)}zss(7);//7letadd=()=>{console.log(arguments)}add(7)//ReferenceError:argumentsinnotdefine;

ECMAscript函数没有签名,因为参数由包含零个或多个值的数组表示。
没有函数签名,自然就没有重载。
函数默认参数仅在调用函数时计算,而不是在定义函数时计算。
尽管箭头函数不支持参数对象,但它们确实支持收集参数的定义。

在执行任何代码之前,JavaScript引擎将首先读取函数声明并在执行上下文中生成函数定义。
并且函数表达式必须等到代码执行到其所在行后,才能在执行上下文中生成函数定义。
引擎还将函数声明提升到顶部。

console.log(6,4);functionzss(a1,a2){returna1*a2}

这样写上面的代码是没有问题的,因为函数声明会任何代码在执行前都会被读取并添加到执行上下文中。
这个过程称为函数声明提升。
如果我们通过定义函数的方式来写,就会出现错误。
而且,函数名在ECMAScript中是一个变量,因此可以在任何可以使用变量的地方使用该函数。
这意味着我们可以将函数作为参数传递给另一个函数,也可以在函数中返回另一个函数。