JavaScript 知识整理(五) 函数

JavaScript 知识整理(五) 函数

目录

JavaScript 知识整理(五) 函数

一、函数定义

二、变量作用域

三、let 关键字

四、方法定义


​​​​​​​一、函数定义

  • 方法一
function abs(x) {
    if (x >= 0) {
        return x;
    } else {
        return -x;
    }
}
  • 方法二
var abs=function (x){
    if (x >= 0) {
        return x;
    } else {
        return -x;
    }
}

注意:

  • function(x){...}是一个匿名函数,函数值传递给abs
  • 不严谨的js允许传递任意个参数,但是只从前往后匹配参数,这些参数都存在argument对象里。

二、变量作用域

  • 函数中的变量具有局域性
  • 函数嵌套时,内函数可以访问外函数变量,外函数无法访问内函数变量
function f1(){
    var x=1;
    function f2(){
        var y=x+1; //有效 y=2
    }
    var z=y+1; //无效
}
  • js所有变量都放在函数前面,方便维护。
  • 全局变量

由于外函数的变量可以在内函数中使用,所以全局变量就是定义在所有函数之前的变量,也就是<script>便签头部。所有的全局变量都默认属于windows对象的属性。比如下方输出依旧正确。

<script>
    var x=1;
    console.log(windows.x);
</script>

三、let 关键字

在ES6之前,我们都是用var来声明变量,而且JS只有函数作用域和全局作用域,没有块级作用域,所以{}限定不了var声明变量的访问范围。例如:

{ 
  var i = 9;
} 
console.log(i);  // 9

ES6新增的let,可以声明块级作用域的变量。

{ 
  let i = 9;     // i变量只在 花括号内有效!!!
} 
console.log(i);  // Uncaught ReferenceError: i is not defined

这个let在for循环中有较好的使用效果

// i虽然在全局作用域声明,但是在for循环体局部作用域中使用的时候,变量会被固定,不受外界干扰。
for (let i = 0; i < 10; i++) { 
  setTimeout(function() {
    console.log(i);    //  i 是循环体内局部作用域,不受外界影响。
  }, 0);
}
// 输出结果:
0  1  2  3  4  5  6  7  8 9

四、方法定义

方法就是将函数放到对象内部

var dog{
    age:4 month;
    eat: function(){
        console.log("吃东西");
    }
}


dog.eat(); //调用方法

同时,函数还存在变量提升暂时性死区两个概念。

猜你喜欢

转载自blog.csdn.net/qq_41459262/article/details/114004614
今日推荐