/*
*
* 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