深入理解Javascript动态方法调用与参数修改的问题


Posted in Javascript onDecember 10, 2013

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

function func1(name) { 
    name = 'lily'; 
    alert(name); 
} 
func1('jack');//输出lily

再看一个例子
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属性

function fun1() { 
    arguments.callee.caller.arguments[0] = 'lily'; 
} 
function fun2(name) { 
    fun1.call(this,name); 
    alert(name); 
} 
fun2("jack");//输出"lily"

可见,外层函数对于内层函数的调用栈是可见的,可修改的。
Javascript 相关文章推荐
弹出广告特效(一个IP只弹出一次)的代码
Jul 27 Javascript
Jquery Autocomplete 结合asp.net使用要点
Oct 29 Javascript
jquery增加时编辑jqGrid(实例代码)
Nov 08 Javascript
JS对象转换为Jquery对象实现代码
Dec 29 Javascript
JavaScript中获取样式的原生方法小结
Oct 08 Javascript
jquery实现简单实用的弹出层效果代码
Oct 15 Javascript
jQuery实现textarea自动增长宽高的方法
Dec 18 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
Aug 01 Javascript
Angular2平滑升级到Angular4的步骤详解
Mar 29 Javascript
浅析node应用的timing-attack安全漏洞
Feb 28 Javascript
vue项目添加多页面配置的步骤详解
May 22 Javascript
js实现鼠标点击飘爱心效果
Aug 19 Javascript
ExtJS的拖拽效果示例
Dec 09 #Javascript
用Javascript获取页面元素的具体位置
Dec 09 #Javascript
jQuery取得select选择的文本与值的示例
Dec 09 #Javascript
JavaScript—window对象使用示例
Dec 09 #Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
Dec 09 #Javascript
跨域传值即主页面与iframe之间互相传值
Dec 09 #Javascript
深入理解JavaScript中的传值与传引用
Dec 09 #Javascript
You might like
PHP4之真OO
2006/10/09 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
使用JavaScript库还是自己写代码?
2010/01/28 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
原来Jquery.load的方法可以一直load下去
2011/03/28 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
Python运算符重载详解及实例代码
2017/03/07 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
Django中信号signals的简单使用方法
2019/07/04 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
allbeauty美国:英国在线美容店
2019/03/11 全球购物
美国第二大连锁药店:Rite Aid
2019/04/03 全球购物
Osklen官方在线商店:巴西服装品牌
2019/04/25 全球购物
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
求高于平均分的学生学号及成绩
2016/09/01 面试题
城市规划毕业生求职信
2013/10/10 职场文书
领导班子在批评与自我批评座谈会上的发言
2014/09/28 职场文书
2016年中学植树节活动总结
2016/03/16 职场文书
财产分割协议书
2016/03/22 职场文书
MySQL表的增删改查(基础)
2021/04/05 MySQL