javascript中函数命名的三种方式
函数
//函数声明式:
function 函数名() {
//函数体 ,功能块
}
//注意:
// function: 定义函数的关键字( 必须小写)
// 函数名: 自定义的一个名字( 调用时必须与函数名称相同的大小写调用函数)
// 函数体: 要封装的某段代码, 它可以完成某个特定的功能
// 特点: 函数声明提升, 自动提升到顶端
// 函数声明可以随时随地调用。
//函数表达式:
var min = function() {
//函数体
}
// 特点: 定义之后调用, 定义之前调用, 报错。
//构造函数的方式声明:
var fn = new Function()
console.log(fn)
function Fun() {
}
var fn = new Fun()
// 函数作用域:
// 全局变量: 不在任何函数内定义的变量就是全局变量。 实际上, JavaScript默认有一个全局对象window, 全局作用域的变量实际上被绑定到window的一个属性: 因此, 直接访问全局变量global和访问window.global是完全一样的。
// 局部变量:(函数内var 声明的变量) 只能被函数自身读取( 该变量的作用域是局部的)。
// 变量的规则:( 变量的作用域)
// 1) 如果一个变量在函数体内部申明, 则该变量的作用域为整个函数体, 在函数体外不可引用该变量:
eg: function fn() {
var x = 1;
}
x = x + 2; // 报错 找不到函数体内的变量
// 2) 如果两个不同的函数各自申明了同一个变量, 那么该变量只在各自的函数体内起作用。 各自为政互补干扰。
eg: function fn1() {
var x = 1;
console.log(x)
}
fn1() //1
function fn2() {
var x = 2;
console.log(x)
}
fn2() //2
// 3) 函数外部的变量就算是和函数内部的变量名称相同, 也是两个变量, 没有任何关系, 彼此不发生影响
var a = 20
function fn() {
var a = 5;
console.log(a) //5
}
console.log(a) //20
fn()
// 4) 函数内部的变量, 没有用var时, 会逐层向上查找
// (如果把值赋给尚未声明的变量, 是隐式声明, 不会变量提升, 直接为全局变量)
eg: var a = 2
function fn() {
console.log(a) //undefiend
var a = 1
console.log(a) //1 //就近原则 在函数体寻找
}
console.log(a) //2 读取函数外a
fn();
console.log(a) //2 调用后函数声明 权重比 var高 所以被a=2覆盖
// 作用域链:变量查找的范围,从函数自身的范围开始找,自身没有
// 找父级,一直找到document为止,找不到结果是undefined.
// 函数同名的话,后写的函数覆盖先写的函数,这叫函数 没有重载。
// 注意:js没有重载
function add() {
console.log(1)
}
function add() {
console.log(2)
}
add() //2
//同名函数会被覆盖
// 遇到连等赋值,等号前有优先提取特点,等号后的变量则看做全局变量 eg: var a=b=5 a有生名提升 b为全局变量