zoukankan      html  css  js  c++  java
  • 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" 

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

  • 相关阅读:
    hp_jetdirect 9100漏洞检测
    fenghuangscannerV3 EXE版本
    计划:6.10
    [PY]进制转换
    OpenStack 制作镜像
    Kernel 问题小记
    Ubuntu 问题小记
    Git 常用命令
    OpenStack 构建单测环境
    SDN 杂谈
  • 原文地址:https://www.cnblogs.com/sideny/p/3289674.html
Copyright © 2011-2022 走看看