JavaScript中遇到的问题(待回答)

一、问题合集

(一)for、点击事件和传参

for循环的一点杂乱分析(不完善)_咕噜一口温开水的博客-CSDN博客https://blog.csdn.net/qq_47286790/article/details/122808941(1)下面两段代码为什么控制台输出的全是4?

代码1

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>for循环</title>
</head>
<body>
    <button>1</button>
    <button>2</button>
    <button>3</button>
    <button>4</button>
 
    <script>
        p = document.querySelectorAll('button');
        let i=0  //情况1与情况3一样
        for(;i<4;i++){
            p[i].onclick = function(){
                console.log(i);
            }
        }
    </script>
 
</body>
</html>

代码2

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>for循环</title>
</head>
<body>
    <button>1</button>
    <button>2</button>
    <button>3</button>
    <button>4</button>
 
    <script>
        p = document.querySelectorAll('button');
        for(var i=0;i<4;i++){
            p[i].onclick = function(){
                console.log(i);
            }
        }
    </script>
 
</body>
</html>

 (2)为什么下面代码控制台输出的是 0,1,2,3

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>for循环(难死我了)</title>
</head>
<body>
    <button>1</button>
    <button>2</button>
    <button>3</button>
    <button>4</button>
 
    <script>
        p = document.querySelectorAll('button');
        for(let i=0;i<4;i++){ 
            p[i].onclick = function(){
                console.log(i);
            }
        }
    </script>
 
</body>
</html>

(3)下面代码输出什么

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>for循环(难死我了)</title>
</head>
<body>
    <button>1</button>
    <button>2</button>
    <button>3</button>
    <button>4</button>
 
    <script>
        btn = document.querySelectorAll('button');//let i=0  //情况1与情况3一样
        /*---------------------------------demo1---------------------------------------*/
 
        // for(var i=0;i<4;i++){   // 换成let试试,情况2     //var i=0是情况3
        //     btn[i].onclick = function(){
        //         console.log(i);     
        //         // [native code] 意思已经很明确了:是 native 的代码实现的 built-in 函数,而不是 JavaScript 代码
        //         // 已被编译为特定于处理器的机器码的代码。
        //     }
        // }
        
        /*----------------------------------demo2--------------------------------------*/
        let i = 0;
        for(let p=0;p<1;p++){
            let i = 3;
            btn[i].onclick = function(){
                let i = 99;
                console.log(i);
            }
        }
    </script>
 
</body>
</html>

(二)闭包问题

(1)控制台输出数字 101

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>闭包</title>
</head>
<body>
    <script>
        let a = 10;
        let b = 20;

        function outerFun(){
            let a = 100;
            function check(){
                console.log(a);    // this.a就输出100,好像有一个隐藏的a,好像自己定义了一个a
            }
            function add(){
                console.log("加了一次");
                a++;
            }
            return {
                a,
                check,
                add
            };//返回一个对象
        }

        let fn = outerFun();
        console.log(fn);
        fn.add();
        fn.check();
    </script>
</body>
</html>

(2)控制台输出数字 100

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>闭包</title>
</head>
<body>
    <script>
        let a = 10;
        let b = 20;

        function outerFun(){
            let a = 100;
            function check(){
                console.log(this.a);
            }
            function add(){
                console.log("加了一次");
                a++;
            }
            return {
                a,
                check,
                add
            };//返回一个对象
        }

        let fn = outerFun();
        console.log(fn);
        fn.add();
        fn.check();
    </script>
</body>
</html>

(三)var

var a = 10;

function fn(){
    var a = 100;
    a++;
    cosole.log(a);
}

fn();//输出101
console.log(a);//输出10

var不是定义全局变量的吗?为什么这里就像局部变量一样?

二、变量查找、类、原型对象、原型链

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function Foo(){
            Foo.a = function(){
                console.log(1);
            }
            this.a = function(){
                console.log(2);
            }
        }
        Foo.prototype.a = function(){
            console.log(3);
        }
        Foo.a = function(){
            console.log(4);
        }
        Foo.a(); // 4
        let obj = new Foo();
        obj.a(); // 2
        Foo.a(); // 1
        Foo.prototype.a(); // 3

    </script>
</body>
</html>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值