请问下JS中excel函数视频教程全集自己调用自己的问题?

js怎么自己调用自己_百度知道
js怎么自己调用自己
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
han知道合伙人
采纳数:77
获赞数:422
很简单,就是自己调用自己,调用自己的方法嘛;如下:function findAimNode(node, aimId){
for(var i =0;i&children. i++){
if(children[i].nodeType != 1)
node = findAimNode(children[i], aimId); //这一行就是调用你自己的方法
lvyingtang知道合伙人
lvyingtang
采纳数:272
获赞数:576
&script type=&text/javascript&&var i=0;function abc(){
document.body.innerHTML+=&abc()函数:执行第&+i+&次&br/&&;
setTimeout(&abc()&,2000);}abc();&/script&
本回答被提问者采纳
警匪∮一家知道合伙人
警匪∮一家
采纳数:314
获赞数:1039
arguments.callee()
w3occv知道合伙人
采纳数:99
获赞数:328
擅长:暂未定制
OoBlueSkyoO知道合伙人
OoBlueSkyoO
采纳数:185
获赞数:1164
&a onclick='this.text=干嘛点我' href=&javascript:();&&点我&/a&this
1条折叠回答
其他2条回答
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。posts - 424,&
comments - 28,&
trackbacks - 0
本来规划的是2013年,狠狠的将JS学习下,谁知计划赶不上变化,计划泡汤了。13年的我对JS来说可以说是属于跟风,对它的理解和认识也仅仅是皮毛而已,也是因为要完成《ArcGIS API for JavaScipt开发教程》而临阵磨枪。
在接触JS一段时间后,觉得还是比较灵活的,灵活的前提是要更深入的了解,就像两个陌生的人,相处的时间长了,了解的时间长了,难免会产生感情一样。对于JS也开始产生了感情,这种感情体现在工作中,体现在周围的环境中。
目前很多开发者纷纷加入JS的阵营,看来这已经不是跟风,而是趋势,这种趋势可能还会一直持续下去。
没有系统的学习过JS,只能在工作内外,抽出时间来学习,来理解,在自己的博文中也不知道写了多少篇,虽然转载的占据了大部分。
虽然自己以前是C#这类语言的使用者,但是心里明白,所谓的语言都是为了解决一些特定的问题,有一些特定使用的场合,不同的语言,其语法,数据类型,甚至运行机制有所差异,但是其思想大同小异,万变不离其宗。
语言种类很多,但是都有其数据类型,int,long等,有循环,有函数,有字符串和数组的操作,这些都是一样的,几乎在一种语言上能找到另外一种语言对应的。
在学习开发的时候,都会让将自己的逻辑结构封装起来,以便日后重复使用,在C#中我们可以写成一个类,或者一个dll,在C#中写过类,也写过dll,但是要达到真正的复用,真正的模块独立,我还是欠缺火候,这一点一直是心中的痛呀,
恨不当初,有那么好的实习机会,却没有好好的利用,惭愧万分。
在JS中,也常常需要复用,将一些常见的操作封装起来,目前看到的很多JS库,比如JQuery就是非常典型的,那么如何在JS中写一个可复用的呢?虽然在JS中有类的这个说法,但是我对这个玩意还是很抵触的,但是存在即合理。JS中的类是通过函数来模拟的,也就是说JS中的函数具有双重角色,用new关键字的将函数视为类,不用new的,它就是一个普普通通的函数。
我们知道,类就是一个数据类型,这个数据类型由属性和方法(函数)组成,如果函数只有属性,没有方法,那么这样的类,一般就单纯的表示为一个数据,增加上一些方法,那么类的功能将会有质的变化。既然在JS中,函数可以表示为类,而类中又有方法,那么在JS中函数内部新定义一个函数,也就不足为怪。
JS中最为强大的内容,我认为除了原型,就是闭包,这里就讨论闭包,闭包其实就是在一个函数内部定义一个新的函数,在执行的时候,会将这个函数返回,也可能是返回一个对象。下面就是一个简单的闭包:
var MathTest = function (x, y) {
var add = function () {
return x +
var x = MathTest(3, 4);
alert(x());
在执行的时候MathTest就是内部的add函数,调用MathTest的时候,相当于执行了x+y,这其实并不起卦,可以将add认为是function内部的一个变量,只是这个变量的值是一个函数,内部的函数是可以访问它的上一个级别的数据,所以我们可以得到正确的值。
var Img = function () {
var T$ = function (id) { return document.getElementById(id); }
var ua = navigator.userAgent,
isIE = /msie/i.test(ua) && !window.
var i = 0, sinDeg = 0, cosDeg = 0, timer = null;
var rotate = function (target, degree) {
target = T$(target);
var orginW = target.clientWidth, orginH = target.clientH
clearInterval(timer);
function run(angle) {
if (isIE) { // IE
cosDeg = Math.cos(angle * Math.PI / 180);
sinDeg = Math.sin(angle * Math.PI / 180);
with (target.filters.item(0)) {
M11 = M22 = cosD M12 = -(M21 = sinDeg);
target.style.top = (orginH - target.offsetHeight) / 2 + 'px';
target.style.left = (orginW - target.offsetWidth) / 2 + 'px';
} else if (target.style.MozTransform !== undefined) {
// Mozilla
target.style.MozTransform = 'rotate(' + angle + 'deg)';
} else if (target.style.OTransform !== undefined) {
target.style.OTransform = 'rotate(' + angle + 'deg)';
} else if (target.style.webkitTransform !== undefined) { // Chrome Safari
target.style.webkitTransform = 'rotate(' + angle + 'deg)';
target.style.transform = "rotate(" + angle + "deg)";
timer = setInterval(function () {
if (i & degree - 1) {
clearInterval(timer);
return { rotate: rotate }
调用代码:
Img.rotate('demo', 360);
这个是一个比较复杂的,但是不要怕,这里会牵扯到另外的知识,自执行函数和匿名函数。
所谓匿名函数就是没有名字的函数,形式如下:
function () {
既然没有名字,那么如何调用呢:
var b=function () {
可以将匿名函数付给一个变量,这个变量现在就充当了这个函数的名称,但是记住,这个不是名称,我只是这么叫,如果觉得不妥的话,可以认为b现在就是这个匿名函数的代表,在用的时候用b就等同于使用右边的函数。除了这种方式,还有就是自执行函数,形式如下:
(function(){
自执行函数相当于我们上面两步的结合:
var b=function () {
自执行函数是非常有用的,可以用它创建命名空间,只要把自己所有的代码都写在这个特殊的函数包装内,在使用的时候只需要用这个奇怪的函数即可,伟大的JQuery就是通过这个奇怪的函数创建了一个$的对象,在这个匿名函数中,往往会定义一个属于自己的命名空间,或者返回一个属于自己的对象,上面的Img对象包含了旋转图片的操作,这操作中,调用了很多匿名函数中定义的其它方法,这些方法都是为Rotate来服务的。那么以后写自己可服用的操作的时候,就可以通过这种做法。
我们见到的操作通常都是返回一个对象,但是也可以放回一个函数,下面的,但是调用的时候,写法有所差异:
var Img = function () {
var T$ = function (id) { return document.getElementById(id); }
var ua = navigator.userAgent,
isIE = /msie/i.test(ua) && !window.
var i = 0, sinDeg = 0, cosDeg = 0, timer = null;
var rotate = function (target, degree) {
target = T$(target);
var orginW = target.clientWidth, orginH = target.clientH
clearInterval(timer);
function run(angle) {
if (isIE) { // IE
cosDeg = Math.cos(angle * Math.PI / 180);
sinDeg = Math.sin(angle * Math.PI / 180);
with (target.filters.item(0)) {
M11 = M22 = cosD M12 = -(M21 = sinDeg);
target.style.top = (orginH - target.offsetHeight) / 2 + 'px';
target.style.left = (orginW - target.offsetWidth) / 2 + 'px';
} else if (target.style.MozTransform !== undefined) {
// Mozilla
target.style.MozTransform = 'rotate(' + angle + 'deg)';
} else if (target.style.OTransform !== undefined) {
target.style.OTransform = 'rotate(' + angle + 'deg)';
} else if (target.style.webkitTransform !== undefined) { // Chrome Safari
target.style.webkitTransform = 'rotate(' + angle + 'deg)';
target.style.transform = "rotate(" + angle + "deg)";
timer = setInterval(function () {
if (i & degree - 1) {
clearInterval(timer);
调用代码:
Img('demo', 360);
这两种方式,根据自己的习惯,我个人倾向前者。
介绍的有点仓促,很多概念没有详细介绍,大家可以看我的其它博文(http://www.cnblogs.com/zuiyirenjian/p/3473304.html)或者网上搜索,我写的这篇的目的只是为了加深对自执行函数的理解,同时也是为了体验如何在JS中达到所谓的&封装&。
关于JS中自执行的函数写法很多,可以看这里:http://www.cnblogs.com/snandy/archive//1966664.html
新的一年即将开始,祝大家新年快乐!
阅读(...) 评论()Js编程语言中,自调用函数是什么?举个Js代码例子解释一下!_百度知道
Js编程语言中,自调用函数是什么?举个Js代码例子解释一下!
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
yugi111知道合伙人
采纳数:14403
获赞数:58847
擅长:暂未定制
自调用函数:顾名思义,有2个意思《1》自行调用的函数:就是指,函数在页面载入后或者之前就自行调用,无需借助其他函数或方法来启动;例如:(function(win){&&&&win.alert(11);})(window);《2》自己调用自己的函数:就是指,递归:在一个函数里面调用自己的函数,当符合一定规则时,跳出自我调用,就是递归。例如:var&fn&=&function(n){&&&&if(n&==&1)&return&1;&&&&else&return&n&*&fn(n-1);}
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。JS中的命名函数,匿名函数,自调用函数和回调函数
function f1(){
console.log(&这个函数就是命名函数&);
function (){
console.log(&这个函数就是匿名函数&);
注意:匿名函数不能直接调用
注意:这样函数不会冲突
(function(){console.log(&这是函数的自调用&);})();//这个函数就是函数自调用
var f1 = function(){
console.log(&你好!&);
//解释:f1里面存储的就是函数代码,通过f1加()的方式调用,没有f1变量的时候,直接在代码后面加上()就可以调用,叫函数的自调用
//函数声明,fn是变量,fn是参数
function f1(fn){
fn();//函数调用----说明fn这个变量中存储的是一个函数
function f2(){
console.log(&函数可以作为参数使用&);
f1(f2);//调用f1,将f2作为参数传进去
//结果:函数可以作为参数使用
★.函数名里面存储的就是函数代码
function f1(){
console.log(&这是一个函数&);
console.log(f1);//打印出来的结果就是上面的函数代码
f1();//这是函数的调用
★.函数表达式:把匿名函数赋给一个变量
var f2 = function(){
console.log(&把匿名函数赋给一个变量&);
f2();//f2中存储的就是函数代码,用变量名加()就是函数调用
注意:函数表达式后面赋值结束后要加分号
★.函数的覆盖问题:如果函数名重复,下面的函数会自动覆盖上面的函数代码
function f1(){
console.log(&这是函数一&);
function f1(){
console.log(&这是函数二&);
f1();//此时打印的结果是:这是函数二
var f1 = function(){
console.log(&这是函数表达式1&);
f1();//结果是:这是函数表达式1
f1 = function(){
console.log(&这是函数表达式2&);
f1();//结果是:这是函数表达式2
f1();//结果是:这是函数表达式2
解释:因为这是函数表达式,所以第一次调用的时候是f1调用上面的代码,接下来又给变量f1重新赋值后,f1里面存储的就是后面的赋值结构果了
★.函数可以作为返回值
function f1(){
return function(){
console.log(&这是被返回的函数&);
var f = f1();//f1函数的调用,此时f就是函数l
f();//调用函数,结果为:这是被返回的函数我在对腾讯地图上的覆盖物添加事件时发现一个奇怪的现象,对地图中所有的覆盖物循环添加click事件,事件中函数调用循环变量i,但click时发现显示的都是循环的最后一个值,
for (var i = 0; i & xyArr. i++) {
qq.maps.event.addListener(markers[i], 'click', function () {
原因是当创建的侦听器,则 i 确实有正确的值,但是当其执行时,它需要的最后一个状态 i& 的情况,解决问题其实很简单,创建一个委托。可以做到这一点是这样的:
var someFunction = (function(vars) {
return function() {
//Do something with vars...
具体实现:
for (var i = 0; i & xyArr. i++) {
var clickListener = (function (i) {
return function () {
qq.maps.event.addListener(markers[i], 'click',clickListener);
这样就解决了上述问题,用(function(){xxx})()是利用匿名函数和闭包用来执行xxx里面的代码,同时所有的定义比如变量的作用域都在闭包里,不会污染到外部命名空间, 这下又明白了不少,以下进行更深入的了解。
javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解。
( function(){&} )()和( function (){&} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立即执行的目 的,后来发现加括号的原因并非如此。要理解立即执行函数,需要先理解一些函数的基本概念。
函数声明、函数表达式、匿名函数
函数声明:function fnName () {&};使用function关键字声明一个函数,再指定一个函数名,叫函数声明。
函数表达式 var fnName = function () {&};使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式。
匿名函数:function () {}; 使用function关键字声明一个函数,但未给函数命名,所以叫匿名函数,匿名函数属于函数表达式,匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或创建闭包等等。
函数声明和函数表达式不同之处在于,一、Javascript引擎在解析javascript代码时会&函数声明提升&(Function declaration Hoisting)当前执行环境(作用域)上的函数声明,而函数表达式必须等到Javascirtp引擎执行到它所在行时,才会从上而下一行一行地解析函 数表达式,二、函数表达式后面可以加括号立即调用该函数,函数声明不可以,只能以fnName()形式调用 。以下是两者差别的两个例子。
function fnName(){
var fnName=function(){
var fnName=function(){
&&&&alert('Hello World');
function fnName(){
&&&&alert('Hello World');
function(){
&&&&console.log('Hello World');&&&
在理解了一些函数基本概念后,回头看看( function(){&} )()和( function (){&} ()
)这两种立即执行函数的写法,最初我以为是一个括号包裹匿名函数,并后面加个括号立即调用函数,当时不知道为什么要加括号,后来明白,要在函数体后面加括
号就能立即调用,则这个函数必须是函数表达式,不能是函数声明。
(function(a){
&&&&console.log(a);&&
(function(a){
&&&&console.log(a);&&
!function(a){
&&&&console.log(a);&&
+function(a){
&&&&console.log(a);&&
}(123456);
-function(a){
&&&&console.log(a);&&
}(1234567);
var fn=function(a){
&&&&console.log(a);&&
可以看到输出结果,在function前面加!、+、 -甚至是逗号等到都可以起到函数定义后立即执行的效果,而()、!、+、-、=等运算符,都将函数声明转换成函数表达式,消除了javascript引擎识别函数表达式和函数声明的歧义,告诉javascript引擎这是一个函数表达式,不是函数声明,可以在后面加括号,并立即执行函数的代码。
加括号是最安全的做法,因为!、+、-等运算符还会和函数的返回值进行运算,有时造成不必要的麻烦。
不过这样的写法有什么用呢?
javascript中没用私有作用域的概念,如果在多人开发的项目上,你在全局或局部作用域中声明了一些变量,可能会被其他人不小心用同名的变量
给覆盖掉,根据javascript函数作用域链的特性,可以使用这种技术可以模仿一个私有作用域,用匿名函数作为一个&容器&,&容器&内部可以访问外
部的变量,而外部环境不能访问&容器&内部的变量,所以( function(){&}
)()内部定义的变量不会和外部的变量发生冲突,俗称&匿名包裹器&或&命名空间&。
JQuery使用的就是这种方法,将JQuery代码包裹在( function (window,undefined){&jquery代码&} (window)中,在全局作用域中调用JQuery代码时,可以达到保护JQuery内部变量的作用。
阅读(...) 评论()}

我要回帖

更多关于 函数调用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信