• JS学习:第一周——NO.1预解释


    1.何为预解释?

      在当前作用域下,在JS代码执行之前,浏览器会对带var和带function的进行提前声明或定义;

      ①带var的:只声明不定义;告诉浏览器,有这么一个变量,但是并没有赋值

    ②带function的:声明+定义;不仅告诉浏览器,有这么一个变量,而且对变量进行了赋值;
    2.作用域链?
    当函数被调用的时候,会形成一个私有作用域,看私有作用域中,是否存在私有变量A:
    1)如果有私有变量A:那么整个作用域中的A,跟外界没有任何关系;所有该作用域中的A,都是私有变量;
    2)如果没有私有变量A:就会往上级作用域进行查找,找到的话,直接用,找不到继续找,一直找到window还没有,就会报错!;
    3.函数定义的3步骤?
    ①.开辟一个空间地址
    ②.把函数体中所有JS代码作为字符串放在这个空间中
    ③.把空间地址赋值给函数名
    4.函数执行的4步骤?
    ①.形成一个私有作用域
    ②.形参赋值
    ③.预解释
    ④.代码从上到下的执行
    几道面试题:

    function fn() {
            var i = 10;
    return function (n) {
    console.log(n + (++i));
    }
    }
    var f = fn();
    f(15);
    f(20);
    fn()(15);
    fn()(20);
    fn()(30);
    f(30);

    var num = 10;
    var obj = {
    num: 20,
    fn: (function (num) {
    this.num *= 2;
    num += 10;
    return function () {
    this.num *= 3;
    num += 1;
    console.log(num);
    }
    })(num)
    };
    var fn = obj.fn;
    fn();
    obj.fn();
    console.log(window.num, obj.num);

    var i=3;
    function fn(){
    i*=2;
    return function(n){
    console.log(n*(++i))
    }
    }
    var f=fn();
    f(3)
    fn()(3);
    f(4);
    fn()(3);
    菜鸟学习,望共同进步!
  • 相关阅读:
    软件乘法实现
    矩阵连乘求解优化
    { 控件动态创建的堆与栈 }
    digital clock based C
    C++初探
    C语言语法教程-链表
    EF Core 实现读写分离的最佳方案
    Windows Terminal 安装及美化
    .netcore centos环境搭建实战
    AutoMapper.RegExtension 介绍
  • 原文地址:https://www.cnblogs.com/HKCC/p/6041403.html
Copyright © 2020-2023  润新知