• Javascript动态方法调用与参数修改的问题


    Javascript中可以对所传参数在函数内进行修改,如下

    1
    2
    3
    4
    5
    function func1(name) {
        name = 'lily';
        alert(name);
    }
    func1('jack');//输出lily

    再看一个例子

    1
    2
    3
    4
    5
    6
    7
    8
    function fun1(n) {
        this.name = n;
    }
    function fun2(name) {
        fun1.call(this,'lily');
        alert(name);
    }
    fun2("jack");//输出"jack"

    fun1函数想把fun2调用时的参数修改为“lily”,但没有成功。弹出的仍然是“jack”。思考下为什么?

    实际上fun1还是有能力把fun2调用时的参数给修改掉的,利用caller属性

    1
    2
    3
    4
    5
    6
    7
    8
    function fun1() {
        arguments.callee.caller.arguments[0] = 'lily';
    }
    function fun2(name) {
        fun1.call(this,name);
        alert(name);
    }
    fun2("jack");//输出"lily" 

    可见,外层函数对于内层函数的调用栈是可见的,可修改的。

  • 相关阅读:
    20200116
    20200115
    20191214数组之四:数字不相同的完全平方数(关于数位上数字判断与sprintf)
    结构体与C++sort()函数的用法
    字符串常用函数
    sscanf用法
    螺旋矩阵
    模m的k次根
    梅森素数与完全数
    bit_reverse_swap
  • 原文地址:https://www.cnblogs.com/sideny/p/3289674.html
Copyright © 2020-2023  润新知