美高梅网址注册-澳门mgm4858集团登录网址
做最好的网站
来自 澳门mgm4858集团登录网址 2019-10-03 21:14 的文章
当前位置: 美高梅网址注册 > 澳门mgm4858集团登录网址 > 正文

函数语句中定义的函数被显示的提前到脚本或则

澳门mgm4858集团登录网址美高梅网址注册,函数定义语句中函数被显式地"提前"到了脚本或函数地顶部。因此它们在整个脚本和函数内部都是可见的。使用var地话只有变量声明提前了--变量初始化代码仍然在原来地位置。

函数使用关键字 function 来定义,定义的方式有两种——函数定义表达式和函数声明语句。下面示例代码中的两种定义写法:

 我们知道关键字function用来定义函数;函数定义可以写成函数定义表达式,也可以写成语句的形式。例如下面的两种写法

在脚本里和函数内部无论在哪个地方定义了函数,其他地方都能够访问。当然,可以举个例子说明。我们定义一个长函数:

//函数定义表达式
var square = function(x){
    return x * x;
};
//函数声明语句
function square(x){
    return x * x;
};
var f = function(x){return x+1;}   //将表达式赋值给一个变量  函数表达式
function f(x){return x+1;}         //含有变量的语句        函数声明
> result = function() {... var b = a;... b();... function a() {..... console.log("I am a!!");..... }... }[Function]> result()I am a!!

尽管函数声明语句和函数定义表达式包含相同的函数名,但二者仍然不同。和通过 var 声明变量一样,函数定义语句中的函数被显式地“提前”到了脚本或函数的顶部。因此它们在整个脚本和函数内都是可见的。使用 var 的话,只有变量声明提前了——变量的初始化代码仍然在原来的位置。然而使用函数声明语句的话,函数名称和函数体均提前:脚本中的所有函数和函数中的所有嵌套的函数都会在当前上下文中其他代码之前声明。也就是说,可以在声明一个 javascript 函数之前调用它。

尽管函数声明语句和函数定义表达式包含相同的函数名;但它们之间还是有区别的。

例子说明了这句话:

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>js-function</title>
</head>
<body>

</body>
</html>
<script type="text/javascript">
distance(0,0,3,4);

//函数声明语句————无论定义在哪里,都会被“提前”到脚本或函数的顶部。
function distance(x1,y1,x2,y2){
    var dx = x2 - x1;
    var dy = y2 - y1;
    alert(Math.sqrt(square(dx) + square(dy)));
};

//函数定义表达式————只有变量声明提前了,而变量的初始化代码仍然在原来的位置。需要注意js执行顺序。
var square = function(x){
    return x * x;
};
</script>

相同点:两种方式都创建了新的函数对象;两者都会被“提前”(函数语句中定义的函数被显示的提前到脚本或则函数的顶部,因此它们在整个脚本内可见);

函数定义语句中函数被显式地"提前"到了脚本或函数地顶部。因此它们在整个脚本和函数内部都是可见的。

上面的代码,由于 square 是函数定义表达式并且定义在了最后,导致在执行 distance 函数的时候,square 的值是 undefined。

不同点:函数声明语句中函数名是一个变量名,变量指向函数对象。和通过var声明变量一样,函数语句中定义的函数被显示的提前到脚本或则函数的顶部,因此它们在整个脚本内可见;

上面例子中函数a在变量b后面被定义。但是我们函数体内第一句话就已经吧函数a赋值给b;并在第2句话调用函数b。如果函数的定义没有被提前的话这样来说应该会报错才对。事实上并没有报错。证明了函数定义会被提前到函数的顶部。脚本级别的函数也是如此。这里不冗余了。

解决方法:

1.使用var只有变量声明提前--变量的初始化任然在原来的位置,然而使用函数声明语句的话函数名称和函数体均提前

本文由美高梅网址注册发布于澳门mgm4858集团登录网址,转载请注明出处:函数语句中定义的函数被显示的提前到脚本或则

关键词: