Js基本语法-06 function函数

48 阅读2分钟
/*
*
* Js基本语法-06  function函数
*       · 函数声明
*          · 有函数名
*               1.function name(argument){ function body }
*               2.const name = function (argument){function body}
*          · 无函数名(自执行函数)
*               //自执行函数前面如果是表达式,需要加”分号“,否则会报错
*               ·(function (argument){function body})());
*      ·变量的作用域
*           ·变量定义
*               ·var,const,let定义的变量是有作用域的
*               ·var定义的变量,在各自函数内部可以访问,函数外部不可以访问
*               ·const,let定义的变量,为块级作用域(每一对花括号都是“块级作用域”)
*           ·变量提升
*               ·扫面整个函数,将所有声明的变量声明提升到函数顶部,所以后面定义的变量,提前引用不会报错
*           ·全局作用域
*               ·不使用var,const,let定义的变量,默认就是全局作用域
*       ·高阶函数
*           ·高阶函数:函数作为参数传递给另一个函数,或者函数作为返回值返回的函数
*       ·闭包
*           ·闭包:函数返回值是一个函数,返回的函数可以访问函数的参数和函数体中的变量,返回的函数就是闭包
*
*
*
* */


function name() {
    console.log("var0",a);// 变量提升不会报错 -->var0 undefined
    if ("c" === "c"){
        var a = "a"
        const  b = "b"
        let c = "c"
        console.log("var",a);
        console.log("const",b);
        console.log("let",c);
    }
    console.log("var1",a);// var定义的变量,在各自函数内部可以访问,所以不会报错

    //因为const,let定义的变量,为块级作用域(每一对花括号都是“块级作用域”)
    // 在这里b,c只能在if语句里面使用
    //所以下面的两条语句会报错
    console.log("const1",b);//ReferenceError: b is not defined,
    console.log("let1",c);//ReferenceError: c is not defined
}
// name()



var f = 1;
console.log("var",f);
//自执行函数前面如果是表达式,需要加”分号“,否则会报错
(function (parame){console.log(parame);})("hello word")


//高阶函数
function f1(parame){
    return function (parame1){
        return parame + parame1
    }
}

console.log(f1(1)(2));//3