记录实验,方便复习;
/* 作用域 链*/
/* 这是向上找,往父级选择输出项 */
let color = "aqua"; //第一个定义
function am(){ // 第一个函数结构
let color = "green"; //第二个定义
function ak(){ //第二个函数结构
console.log(color); //输出定义内容
//这里的作用域链是先寻找父级,找不到输出项
//那么它就会继续往外寻找该输出项,直到找到并返回
//这个作用域就会停止运行了
}
ak(); //第二个 调用接口
}
am(); //第一个调用接口
/* 块级作用域 */
function al(){
let aa = "hello";
console.log(aa);
}
al();
/* 变量和函数预解析 */
console.log(myName);
//这是预解析的编写,会返回 undefined
//引擎会先把 声明变量的定义先放在顶部,这就是预解析
var myName = "小七"; //全局声明变量
console.log(myName); //这是正常逻辑的编写
/* 函数预解析 */
sun(); //函数调用 预解析的编写模式
function sun(){ //函数结构
console.log("这是一个函数"); //输出
}
sun(); //这是正常编写模式
/* 函数表达式 */
// fun(); 无法在函数体前面进行调用
var fun = function (){ //这是赋值的函数体
console.log("我是小七");
} //定义的函数表达,所以它属于局部
fun(); //在这里调用函数体
//以下是面试题:
/* 案例 */
//这里等于调用(打印)了函数体
console.log(func); //undefined
var func = 123;
console.log(func); //123
function func(){//没有调用
console.log("hello world");//hw
}
//自己猜的返回数据是
//真实是,函数体 ,123
/* 案例2 */
function func1(numg){
console.log(numg);
var numg = 456; //全局声明
console.log(numg);
}
var numg = 789; //这里赋值了 参数会作为函数的变量
func1(numg); //调用
//自己的答案 456 789
//正确答案 789 456
/* 案例3 */
var numm = 123; //唯一可执行声明变量
function kl(){
console.log(numm); //123
}
function ko(){
var numm = 456; //违法
kl(); //这里第一个函数的调用无法执行
}
ko(); //可执行函数体
console.log(numm); //123
//我的答案 456 123
//真是答案 123 123
/* 案例4 */
function fnl(){
var a = b = c = 3; // 它们是全局,相同变量
console.log(a); //3
console.log(b); //3
console.log(c); //3
}
fnl();
console.log(c); //3
console.log(b); //3
console.log(a); //外部无法打印,报错(a 是局部变量?)
//自己的答案 报错 3 3
//真实的答案 3 3 3 报错