javascript 打印函数名称和被引用的函数

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
	<title></title>
</head>
<body>
	<script type="text/javascript">
	    // 打印当前js 的函数函数体
		function hello(){
		 // <!-- alert(100000); -->
		var funName=arguments.callee;
		// 判断是否为空  indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
		if(funName){
		     // 转成字符串
		      funName=funName.toString();
		      funName=funName.substring(0,funName.indexOf("{"));
		}
		    document.writeln("function's name is " +funName);
		}
		// 执行函数
		hello();

		function world(){
			//world.caller得到的是b函数的引用
			if(world.caller)
			  document.writeln(world.caller);
		}
		// print it 

		function helloworld(){
			helloworld001();
			helloworld002();
			helloworld003();
		}
		// 多个函数引用
		function  helloworld001(){
		      world();
		}

		function  helloworld002(){
		      world();
		}

		function  helloworld003(){
		      world();
		}

		helloworld();
	</script>
</body>
</html>

IE edge模式结果如下:function‘s name is function hello() function helloworld001(){ world(); } function helloworld002(){ world(); } function helloworld003(){ world(); }

时间: 2024-08-08 22:07:34

javascript 打印函数名称和被引用的函数的相关文章

理解函数表达式的函数名称

函数表达式: function 函数名称(可选)(参数:可选){函数体}. 之前不怎么理解:既然函数表达式里的函数名称可选,那有函数名与没函数名又有什么区别呢. 按照EMCA标准,函数表达式格式如下: FunctionExpression : function Identifier opt ( FormalParameterList opt ){ FunctionBody } 这种函数表达式又称有名函数表达式(named function expression),这个名称只能在函数内部使用 va

能否在函数内动态获取函数名称 ?(亲测,居然真的可以)

C++ 可以用宏定义 __FUNCTION__ 或__func__ 获取所在的函数.方便调试. #define LOG(fmt, args...) printf("%s:"fmt,__FUNCTION__,##args) Delphi是否也能呢 ?Delphi 如何动态获取函数名称,而不是每个函数log都打一遍函数名. C++ Builder 是否像 C++ 也提供这种支持 ? 可以通过一些调试信息获取,请研究jclDebug.ProcByLevel 32 位系统不错.64 位系统的获

设计一个函数,它接受不定数量的参数,这是参数都是函数。这些函数都接受一个回调函数作为参数,按照回调函数被调用的顺序返回函数名

function acceptFuncs() { var fnNames = []; //定义数组字面量,用来保存函数名称 for (var i = 0; i < arguments.length; i++) { //for循环检测接收到的每个参数是否为函数,是则传递回调函数给它,最后所结果压入数组中 if (typeof arguments[i] === "function") { fnNames.push(arguments[i](callback)); } } for (v

JavaScript基础知识(变量/引用/转换/函数)

-------------------------------------------- 变量 全局变量:在函数体外声明,全局可以使用 局部变量:通过关键字var来声明 变量类型 1 <script type="text/javascript"> 2 var a; 3 // 十进制 4 a = 1; 5 a = 1.2; 6 a = -23; 7 a = .23e4; 8 a = 3e-2; 9 // 十六进制 10 a = 0xABCDE; 11 a = 0Xff; 12

JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法

函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留言告诉我, 谢谢).因为调用对象是作用域链的一部分,所以在函数体内可以把这个对象属性作为变量来访问. 调用对象的属性包括:用var声明的局部变量,函数形参,还有一种特殊的属性arguments 函数的实际参数:实际参数对象 arguments对象,用来引用实际参数对象.函数的arguments对象并

打印文件夹中所有dll输出表中函数名称

今天逆向破解firefox浏览器中保存的账号及密码,因为firefox对账号的信息不断的提高安全性,所以之前破解中需要用到的一个导出函数不知被封装到那个dll中了,但firefox安装目录下又有许多的dll,一个一个的使用loadPe工具去查找太麻烦了,于是就编写了一个小程序去遍历文件夹下所有的dll的导出表中的函数名称并打印出来. 头文件: #include <Windows.h> #include <stdio.h> #include <imagehlp.h> #p

JavaScript学习笔记【3】数组、函数、服务器端JavaScript概述

笔记来自<JavaScript权威指南(第六版)> 包含的内容: 数组 函数 服务器端JavaScript概述 数组 数组是动态的:根据需要它们会增长或缩减,并且在创建数组时无须声明一个固定的大小或在数组大小变化时无须重新分配空间. 数组可能是稀疏的:索引不一定要连续的,它们之间可以有空缺. 通常,数组的实现是经过优化的,用数字索引来访问数组元素一般来说比访问常规的对象属性要快很多. 数组继承自Array.prototype中的属性,它定义了一套丰富的数组操作方法. 如果省略数组直接量中的某个

javascript中值传递与值引用的研究

今天重新看了一下<javascript高级程序设计>,其中讲到了javascript中的值传递和值引用,所以就自己研读了一下,但是刚开始没有明白函数中的参数只有值传递,有的场景好像参数是以引用的方式传递的,但是实际上却不是,那到底是怎么回事,或者是函数中的传值是值传递还是值引用呢,下面来对书上给出的例子做一个图解,这样能够更好的解释这个问题.有顿悟的感觉.javascript中貌似共有8种数据类型,包括了字符串类型,数值类型,布尔类型,undefined类型,null类型,对象,数组,函数:1

深入理解JavaScript系列(2):揭秘命名函数表达式

前言 网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点. 简单的说,命名函数表达式只有一个用户,那就是在Debug或者Profiler分析的时候来描述函数的名称,也可以使用函数名实现递归,但很快你就会发现其实是不切实际的.当然,如果你不关注调试,那就没什么可担心的了,否则,如果你想了解兼容性方面的东西的话,你还是应该继续往下看看. 我们先开始看看,什么叫函数表达式,然后再说一