1. 数组中也有for……in,相较于对象中的用法是有区别的:

    数组中(直接取value)

    var arr = [‘曹操’,’曹植’,’曹丕’] for(i in arr){ console.log(i) //0 1 2 console.log(arr[i]) //曹操 曹植 曹丕 }

    对象中(代表key)

    var obj = new Object(); obj = { father:’曹操’, son:’曹植’ } for(i in obj){ console.log(i) ; //代表key值 father son console.log(obj[i]) ; //代表vulue值 曹操 曹植 }

    1. let和var的区别
    2. call()和apply()的区别
    3. image.png

    是undefined,因为这里对变量a的定义等于是先var但是并没有赋值,那么这里存在a,就不会进入判断,那么a就没有被赋值。所以是undefined.

    image.png

    1. image.png

    这里的这种输出结果是因为,var a=b=3 这段其实可以写成 var a=b;b=3;则这里b是全局变量。

    6.image.png

    这里考的是JS的运行机制! 事件(click,focus等等),定时器(setTimeout和setInterval),ajax,都是会触发异步,属于异步任务;js是单线程的,一个时间点只能做一件事,优先处理同步任务; 按照代码从上往下执行,遇到异步,就挂起,放到异步任务里,继续执行同步任务,只有同步任务执行完了,才去看看有没有异步任务,然后再按照顺序执行! 这里for循环是同步任务,onclick是异步任务,所以等for循环执行完了,i变成4了,注意:这里因为i是全局变量,最后一个i++,使得i为4(后面的onclick函数,最后在循环外面执行,不受i<length限制); 所以for循环每执行一次,onclick事件函数都会被挂起一次,共4次; for循环结束后,点击事件 触发了4个onclick函数,接着输出4个4!

    1. 基本类型:string null undefined number boolean 复杂类型:object array date regexp function 基本包装类型:boolean number string 单体内置对象:global math 注意,首字母全都大写。
    2. JavaScript 中包含以下 7 个全局函数,用于完成一些常用的功能(以后的章节中可能会用到):

    escape( )、eval_r( )、isFinite( )、isNaN( )、parseFloat( )、parseInt( )、unescape( )

    1. image.png

    这句话会将背景变为红色,因为背景颜色在js中只有用驼峰法的写法,全部小写是不正确的。

    1. image.png

    首先ReferenceError是引用错误。这里是这样的,外面的let x首先定义了x,但是let是块级作用域,所以函数体里面的let 重新定义了x,重新写一下这个函数的话就是:这样的话显然x是没有定义的

    1. let foo = ()={
    2. let x;
    3. console.log(x);
    4. x=20;
    5. x++;
    6. }

    11.image.png

    这里重新写一下这段代码,即js编译器处理的时候会按什么顺序处理

    1. var num;
    2. var foo;
    3. function foo(x,y){
    4. return x+y;
    5. }
    6. foo = function(x,y){
    7. return x-y;
    8. }
    9. num = foo(1,2)

    这样很明显就看出了用的是哪个函数。
    1. 变量声明、函数声明都会被提升到作用域顶处;
    2. 当出现相同名称时,优先级为:变量声明(foo#1) < 函数声明(foo#2) < 变量赋值(foo#3)
    _

    1. image.png

    再次出现这种问题,首先执行顺序是先for,但是js是单线程运行的,所以settimeout()被挂起,等到for执行完,挂起了3个settimeout(),这时i已经变成了3,所以输出3个3,注意这里i是用var定义的,如果是用let定义的话,就不会出现这种情况。