//function getSum(x, y) {
// return x + y
//}
//let result = getSum(1, 2)
//形参:x y 实参:1 2
//调用者:getSum(1,2)
//函数中必须要有调用者 函数才会被执行,函数的返回值给的也是调用者
//如何理解函数?
//首先 声明一个你需要的函数,这一步就像数学中的公式一样,没有为什么,就是这个公式!
//拿上面的例子来说,return x + y 就相当于;let return = x + y但不能这么写,因为语法是错的,只是这样理解
//let result = getSum(1,2)就相当于let x =1 ,y= 2的同时 为result赋值 而result的值就是return返回的值,返回给了调用者getSum(1,2)
//什么是调用者?就好比我用1,2输入,我获得了x+y的值 这个值是因为我的输入才获得的,所以我就是这个函数的调用者
//作用域:限定程序代码中所用到的名字的可用性的代码范围,即他的作用域,提高程序逻辑的局部性,增强程序的可靠性,减少了名字冲突
//全局作用域:作用于所有代码执行的环境(整个<script>标签内部),或者一个独立的js文件
//局部作用域:作用域函数内的代码环境,因为跟函数有关系,所以也称为函数作用域
//根据作用域的不同,变量可以分为:
//全局变量:函数外部let的变量,在任何区域都可以访问和修改。
//局部变量:函数内部let的变量,只能在当前函数内部访问和修改
//特殊情况!!!!如果函数内部,变量没有声明,直接赋值,也当全局变量看,但这种方法非常不推荐!
// 例子: function fn() { 形参也是局部变量
// num = 10
// }
// fn()
// console.log(num)
//在不同的作用域下,如果存在变量名冲突的情况,在能够访问到的情况下,先局部,局部没有再找全局,遵循就近原则
//匿名函数:
// 具名函数:声明语法:function fn {}
// 调用:fn()
// 匿名函数:function(){} (没有名字的函数,无法直接使用)
// 使用方法:
// 1.函数表达式:将匿名函数赋值给一个变量,并通过变量名称进行调用,称为函数表达式
// 语法: let fn = function(){
// 函数体
// }
// 例子: let fn = function(x,y){
// console.log(x+y)
// }
// fn(1,2)
//函数表达式与具名函数的区别:具名函数可以写在任何位置,表达式必须先声明表达式 后使用!!
//2.立即执行函数:避免全局变量之间的污染
// 语法:
// 1.(function () {
// console.log(11)
// })();
// 2.(function () {
// console.log(11)
// }());
// 例:
// (function () {
// let num = 10
// })();
// (function () {
// let num = 10
// }());
// (function(x, y){
// console.log(x + y)
// }) (1, 2);
//拆解理解:
// 首先,function(){}是一个函数,(function(){})中最外围的括号相当于允许这个函数没有名字,后面的()则是正常调用函数的方法
//语法只用(function(){})(); 另外一个不提倡 多个立即执行函数之间用分号隔开
//
console