red
red
一、作用域分为哪三种?
全局作用域:函数外部或者整个script有效
局部作用域: 也称为函数作用域,函数内部有效
块级作用域: {} 内有效
二、根据作用域不同,变量分为哪三种?
全局变量
局部变量
块级变量
三、有一种特殊情况时全局变量时哪种?我们提倡吗?
1、局部变量或者块级变量没有let声明直接赋值的当全局变量看
2、强烈不推荐
3、还有一种特殊情况,函数内部的形参可以当坐局部变量看。
四、在不同作用域下,可能存在变量命名冲突的情况,到底改执行谁呢?
let num = 10
function fn() {
let num = 20
console.log(num)
}
fn()
1、只要是代码,就至少有一个作用域
2、卸载函数内部的局部作用域
3、如果函数中还有函数,那么在整个作用域中就可以诞生一个作用域
4、根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作作用域链。
四 、匿名函数
将匿名函数赋值给一个变量,并且通过变量名称进行调用 我们将整个称为函数表达式
//语法:let fn = function() {
//函数体
}
//调用
fn()//函数名
五、 立即执行函数的作用?
避免全局变量之间的污染
//方式1
(function () { console.log(11)}) ();
//方式2
(function () {console.log(11)} ());
多个立即执行函数 用;隔开,要不然会报错
(function(){
//防止变量污染
console.log(11)
})();
(function(){
//防止变量污染
console.log(12)
})()
六、立即执行函数有什么作用?
防止变量污染
七、立即执行函数需要调用吗?有什么注意事项?
无需调用,立即执行,起始本质已经调用了
多个立即执行函数之间用分号隔开
作用域链:采用就近原则的方式来查找变量最终的值。
全局作用域:函数外部或者整个script有效
// 1、全局作用域
let num1 = 11
console.log(num1)
function fn() {
console.log(num1)
}
fn()
if(true) {
console.log(num1)
}
局部作用域 : 也称为函数作用域,函数内部有效
// 2、在局部作用域下,变量是局部变量
//函数内的变量,只能给内部使用,函数外面不能使用
function fn() {
let num = 10
console.log(num)
}
fn()
function fn() {
let num = 10
console.log(num)
function fn1() {
console.log(num)
}
fn1()
}
fn()
块级作用域: {} 内有效
for(let i = 0 ; i < 5 ; i++) {
// 块级变量只能在大括号内打印
console.log(i)
}
作用域链 :采用就近原则返回的数值
let num = 10
function fn() {
let num = 20
console.log(num) //打印20 哪个离得近就打印哪个
}
fn()
匿名函数 :是没有名字的函数,在实际开发中使用的频率非常高。
let fn = function (x, y) {
console.log(x + y)
}
fn(1,2)
单个立即执行函数
//1、第一个小括号放的形参 ;第二个小括号放的是实参
(function() {
console.log(111)
})
()
// 立即执行函数
(function(){
//防止变量污染
let num = 20
console.log(num)
})()
多个立即执行函数
//多个立即执行函数 用;隔开,要不然会报错
(function(){
//防止变量污染
console.log(11)
})();
(function(){
//防止变量污染
console.log(12)
})()
函数小技巧
// x和y 可以看做是函数内部的局部变量
//调用的时候会有个内部判断是否有参数传递过来
//没有参数 则 执行 x=0
//有参数,则执行实参
function fn(x=0,y=2) {
console.log(x+y)
}
fn()
fn(3,5 )