day25 js中的预解析、递归函数、事件 2021.09.16

预解析:(变量提升)

代码在执行之前先进行解析,将变量和函数的声名放在当前作用域的最前面。

总结:

1.用var关键字声名的变量,将变量的声名提升到当前作用域的最前面,赋值不提升

2.自定义的函数整体提升到当前作用域的最前面

3.函数同名,后面的会覆盖前面的

4.变量和函数同名,函数优先提升

面试题:

//1. 
var num = 10;
fn1();
function fn1() {
  console.log(num);
  var num = 20;
}

//2. 
var a = 18;
fn2();
function fn2() {
    var b = 9;
    console.log(a);
    console.log(b);
}

//3.
fn3();
console.log(c);
console.log(b);
console.log(a);
function fn3() {
  var a = b = c = 9;
  console.log(a);
  console.log(b);
  console.log(c);
}

扫描二维码关注公众号,回复: 13566103 查看本文章

//4. 思考题
var a = 4;
console.log(a);
a = 6;
console.log(a);
function a() {
    console.log('哈');
}
a();
a = 10;
console.log(a);

函数的嵌套:(函数中调用函数)

作用域

1.函数外边的变量叫做全局变量,可以在函数外面和函数里面使用。

2.函数内部的变量叫做局部变量,只能在函数内部使用。

变量访问和赋值:会在当前作用域查找,如果没有会往上级查找 直至找到全局

访问:全局中也没有的话 就会报错 也会显示undefiend

赋值:全局中没有的话 就会自己定义一个变量 并且赋值

递归函数:(就是在函数中调用自己)造成内存消耗 性能比较差

// 求10的阶和,即:10+9+8+...+1
function facSum(num){
    if(num == 1){
        return 1;
    }
    return num + facSum(num-1);
}
var res = facSum(10);
console.log(res); // 55

事件:(用户在网页上的动作,例如:鼠标点击、鼠标移动、键盘按下)

-1)通过绑定结构 触发函数执行调用 绑定的名称.事件名称 = function(){}

- 2)通过绑定结构 触发函数执行调用 绑定的名称.事件名称 = 函数名称 后面执行的小括号不能有

鼠标类事件:

- onclick 单击事件

- ondblclick 双击

- onmousemove 鼠标移入

- onmouseout 鼠标移出 鼠标移入进来灭有变化 当移出一次会变化一次

- onmousedown 鼠标按下

- onmouseup 鼠标抬起

- oncontextmenu 右击

键盘类事件: 绑定对象是window

- onkeydown 键盘按下

- onkeyup 键盘抬起

- onkeypress 键盘敲击 绑定键位

表单类事件:验证

- onfocus 聚焦

- onblur 失去焦点

- onchange 改变

猜你喜欢

转载自blog.csdn.net/weixin_50163576/article/details/120334320