JavaScript arguments 学习 及 练习题

本文深入探讨了JavaScript中的闭包概念,包括如何利用arguments.callee解决立即执行函数无名问题,以及通过caller属性追踪函数调用环境。此外,还解析了变量查找机制、this指向规则以及函数执行上下文,提供了多个代码示例帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • arguments.callee

         解决立即执行函数 没有函数名问题 闭包计算

// 计算阶乘
var num = (function(n){
    if(n ==1) {
        return 1;
    }
    return n * arguments.callee(n - 1);
}(10))
  • fun.caller

       被调用的环境

function test() {
    demo();
}

function demo() {
    console.log(demo.caller);
}

test();  // function test() { demo() } 输出被调用的环境
  • 在严格模式下 callee caller 不能使用

练习题

// 1. 写出下面程序执行的结果
var foo = '123';
function print() {
    var foo = '456';
    this.foo = '789';
    console.log(foo);
}
print(); // '456'; 自己有 打印自己的 自己没有往上找 访问的是foo 如果是this.foo 则为'’789'

// 2. 运行 test() 和 new test() 的结果分别是什么
var a = 5;
function test() {
    a = 0;
    console.log(a);
    console.log(this.a);
    var a;
    console.log(a);
}
test(); // 0, 5, 0 在window执行 this指向window所以是5
new test(); // 0, undefined ,0  不存在this.a 所以是 undefined

// 3. 写出下面程序执行的结果
function print() {
    console.log(foo);
    var foo = 2;
    console.log(foo);
    console.log(hello);
}
print(); // undefined, 2, 报错 hello is not defined

// 4. 写出下面程序执行的结果
function print() {
    var test;
    test();
    function test() {
        console.log(1)
    }
}
print(); // 1

// 5. 写出下面程序执行的结果
function print() {
    var marty = {
        name: 'marty',
        printName: function() {
            console.log(this.name);
        }
    }
    var test1 = {name: 'test1'};
    var test2 = {name: 'test2'};
    var test3 = {name: 'test3'};
    test3.printName = marty.printName;
    var printName2 = marty.printName.bind({ name : 123 });
    marty.printName.call(test1);
    marty.printName.apply(test2);
    marty.printName();
    printName2();
    test3.printName();
}
print();

// 6. 写出下面程序执行的结果
var bar = {a: '002'};
function print() {
    bar.a = 'a';
    Object.prototype.b = 'b';
    return function inner() {
        console.log(bar.a);
        console.log(bar.b);
    }
}
print()();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值