进阶篇:JS函数 (5)

2019-05-18  本文已影响0人  饥人谷1904_陈俊锋

饥人谷学习进阶第 5 天

JS函数

函数和作用域

JavaScript函数是指一个特定代码块,可能包含多条语句,可以通过名字来供其它语句调用以执行函数包含的代码语句。

调用函数通过 函数名称() 的形式调用

声明函数:


function 函数名() {
    statement;
}

函数表达式:


var 函数名 = function() {
    statement;
}

参数:


形参 实参

函数定义时可以写多个参数

arguments:


在函数内部,你可以使用 arguments 对象获取到该函数的所有传入参数

arguments[0] 第一个参数

重载


重载是很多面向对象语言实现多态的手段之一,在静态语言中确定一个函数的手段是靠方法签名——函数名+参数列表,也就是说相同名字的函数参数个数不同或者顺序不同都被认为是不同的函数,称为函数重载

在JavaScript中没有函数重载的概念,函数通过名字确定唯一性,参数不同也被认为是相同的函数,后面的覆盖前面的,但这不意味着JavaScript不能通过重载功能实现一个函数

在JavaScript中,函数调用没必要把所有参数都传入,只要你函数体内做好处理就行,但前提是传的参数永远被当做前几个

function printPeopleInfo(name, age, sex){
    if(name){
        console.log(name);
    }

    if(age){
        console.log(age);
    }

    if(sex){
        console.log(sex);
    }
}

返回值


函数执行后反馈一个结果可以用 return 来实现

调用return后,函数立即中断并返回结果,即使后面还有语句也不再执行

其实我们不写return语句,函数也会默认给我们返回 undefined

函数的声明前置


和变量的声明会前置一样,函数声明同样会前置,如果我们使用函数表达式那么规则和变量一样

fn() // "1"

function fn(){
    console.log('1')
}
console.log(fn) //undefined

var fn = function() {}
*********
相当于下面
*********
var fn //变量的提升

console.log(fn)
fn = function() {}

函数立刻执行


(function(){}) ()

立刻执行表达式:借用函数的局部作用域,实现作用域的隔离

命名冲突


当在同一个作用域内定义了名字相同的变量和方法的话,会根据前置顺序产生覆盖

var fn = 3;
function fn(){}

console.log(fn); // 3
*****
相当于
*****
var fn
function fn(){}  //覆盖上面的

fn = 3  //重新赋值
console.log(fn)

当函数执行有命名冲突的时候,可以认为在还是内部一开始有隐藏的声明变量这个操作

function fn(fn){
  
  console.log(fn);

  var fn = 3;
  console.log(fn);
}
相当于
function fn(){
  var fn = arguments[0]
  console.log(fn);

  var fn = 3;
  console.log(fn);
}

fn(10) 

//上面两个输出都是 10 3

函数的递归


自己调用自己,注意要有结束条件

效率低
算法简单逻辑清晰

作用域


{} 直接写大括号没有作用域

函数外不能使用函数内声明的变量,但是函数内可以使用函数外声明的变量。

上一篇 下一篇

猜你喜欢

热点阅读