JavaScript进阶1-学习笔记

本文详细介绍了JavaScript的预解析机制,展示了不同情况下的执行顺序,并通过实例解析了作用域的概念,包括全局作用域、局部作用域以及ES6的块级作用域。此外,还探讨了函数和变量同名时的优先级问题。最后,文章提到了面向对象编程的简单应用。

JavaScript进阶1

预解析

//预解析
//1)
console.log(a);
var a = 1;
//解析过程
var a;
console.log(a);
a = 1;

//2)例子 
console.log(f);
var f = 123;
function f(){
	console.log(456);
}
//解析过程
var f;
function f(){
	console.log(456);
}
console.log(f);  //function   当变量和函数同名时,优先留下函数的值(不管谁先谁后,函数优先级更高)
f = 123;

//4)
var x = 100;
function x(){
	console.log(456);
}
console.log(x);  //100
//解析过程
var x;
function x(){};
x = 100;
console.log(x);

//5)
console.log(a,b,c,d,e);
var a = 10;
var b;
c = 30;
function d(){
    console.log('d')
};
var e = function(){
    console.log('e')
}
//解析过程
var a;
var b;
function d(){};
var e;
//c  错误


//面试题
    console.log(a);
    var a = 1;
    function a(){console.log(2)};
    console.log(a);
    var a = 3;
    console.log(a);
    function a(){console.log(4)}
    console.log(a);
    //解析过程
    // var a;
    // function a(){console.log(2)};
    // function a(){console.log(2)}; //当变量和函数同名时,优先留下函数的值(不管谁前或后,函数优先级更高)
    // function a(){console.log(4)}
    //执行过程
    // console.log(a);   ===>function a(){console.log(4)}
    // a = 1;
    // console.log(a); ===>1
    // a = 3;
    // console.log(a);  ===>3
    // console.log(a);  ===>3

作用域

//作用域   ES5 全局作用域  局部作用域    ES6添加块级作用域
var x = 10;   //全局作用域
function f1(){
    var y = 100;  //局部作用域 
    console.log(x)
};
function f2(){
    var z = 1000; //局部作用域 
    console.log(x)
};
console.log(y);

//1)
    var a = 1;  //全局作用域
    function f1(){  //f1可访问  a
        var b = 2;   //b属于f1下的作用域
        function f2(){
            var c = b;   // 2
            b = a;   //1
            a = c;  //2
            console.log(a,b,c);  // 2 1 2
        };
        f2();
    };
    f1();

//2)
    var a = 1;
    function f1(){
        console.log(a);  // 1
    };
    f1();

//3)
    function f1(){
        var a = 1;
    };
    f1();
    console.log(a); // 报错

//4)
    var a = 1;
    function f1(){
        console.log(a);
        a = 2;
    };
     f1();
     console.log(a);
     //解析过程
    // var a;
    // function f1(){};
    // a = 1;
    // f1();   a = 2;
    // console.log(a); == > 2

//5)
    //重点:全局变量和局部变量不同名时,作用域是整个程序
    //全局变量和局部变量同名时,全局变量的作用域不包含同名局部变量的作用域
    var a = 1;
    function f1(){
        console.log(a);   // undefined
        var a = 2;
    };
    f1();
    console.log(a);  // 1

//  面试题
    var a = 10;
    function f1(){
        var b = 2*a;   //2*undefined ==>NAN
        var a = 20;
        var c = a+1;   //21
        console.log(b);
        console.log(c);
    };
    f1();

面向对象的写法

//可见前JavaScript基础2文章

链接:https://blog.youkuaiyun.com/hhhmonkey/article/details/118367248

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值