zoukankan      html  css  js  c++  java
  • 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);
    菜鸟学习,望共同进步!
  • 相关阅读:
    【LeetCode OJ】Remove Element
    【LeetCode OJ】Remove Duplicates from Sorted Array
    【LeetCode OJ】Swap Nodes in Pairs
    【LeetCode OJ】Merge Two Sorted Lists
    【LeetCode OJ】Remove Nth Node From End of List
    【LeetCode OJ】Two Sum
    【LeetCode OJ】Majority Element
    最长公共子序列问题
    php fopen与file_get_contents的区别
    PHP 技巧集合
  • 原文地址:https://www.cnblogs.com/HKCC/p/6041403.html
Copyright © 2011-2022 走看看