问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

javascript 的 "!function" 是什么意思?

发布网友 发布时间:2022-04-23 11:56

我来回答

6个回答

懂视网 时间:2022-04-22 14:47

本篇文章给大家带来的内容是关于JavaScript中function的详细理解(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

JavaScript 中的 function 有多重意义。它可能是一个构造器(constructor),承担起对象模板的作用; 可能是对象的方法(method),负责向对象发送消息。还可能是函数,没错是函数,和对象没有任何关系独立存在的可以被调用的函数。

由于语言设计者的妥协,在 JavaScript 加入了一些 class 相关的特性,以使 JavaScript 看起来确实象 Java,可以 “面向对象”。虽然 JavaScript 添加了 new 和 this, 但却没有 class (ES已加)。最后 function 临时担负起 class 的任务。

语义1:作为构造器的 function

/**
@class Tab
@param nav {string} 页签标题的class
@param content {string} 页面内容的class
**/
function Tab(nav, content) {
 this.nav = nav;
 this.content = content;
}
Tab.prototype.getNav = function() {
 return this.nav;
};
Tab.prototype.setNav = function(nav) {
 this.nav = nav;
};
Tab.prototype.add = function() {
};
// 创建对象
var tab = new Tab('tab-nav', 'tab-content');

这里定义了一个类 Tab,创建了一个对象 tab。以上使用了 function ,this, new。this, new 是常见的面向对象语言中的关键字, 这里的 function 则担负传统面向对象语言中的 class 作用。当然这时候标识符的命名一般遵循 “首字母大写” 规则。

语义2:作为对象方法的 function

由于 JavaScript 中无需类也可以直接创建对象,因此有两种方式给对象添加方法。第一种先定义类,方法挂在原型上,如上例的 Tab,原型上有 getNav、setNav 和 add 方法。以下还有一种,直接在 function 内的 this 上添加方法。

function Tab(nav, content) {
 this.nav = nav
 this.content = content
 this.getNav = function() {
// ...
}
 this.setNav = function() {
// ...
}
 this.add = function() {
// ...
}
}

这里 Tab 是语义, this.getNav/this.setNav/this.add 是语义,作为对象的方法。 另外,可以直接定义对象及其方法

var tab = {
 nav: '',
 content: '',
 getNav: function() {
// ...
},
 setNav: function() {
// ...
},
 add: function() {
// ...
}
}

tab.getNav/tab.setNav/tab.add 是语义,作为对象 tab 的方法。
语义3:作为独立的函数

/*
判断对象是否是一个空对象
@param obj {Object}
@return {boolean}
*/
function isEmpty(obj) {
 for (var a in obj) {
return false
}
 return true
}
// 定义一个模块
~function() {
 // 辅助函数
 function now() {
return (new Date).getTime()
}
 // 模块逻辑...
}();
// 采用CommonJS规范的方式定义一个模块
define(require, exports, moduel) {
 // 辅助函数
 function now() {
return (new Date).getTime()
}
 // 模块逻辑...
})

isEmpty 作为一个全局函数存在,模块定义里面的 now 则作为局部函数存在,无论 isEmpty 还是 now 这里的 function 都指函数,它不依赖与对象和类,可以独立被调用。
语义4:匿名函数定义模块

// 全局命名空间
var RUI = {}
// ajax.js
~function(R) {
 // 辅助函数...
 ajax = {
request: function() {
 // ...
}
getJSON: function() {
 // ...
}
...
}
 // 暴露出模块给 R
 R.ajax = ajax
}(RUI);
// event.js
~function(R) {
 // 辅助函数...
 // 事件模块定义...
 // 暴露出模块给 R
 R.event = event
}(RUI);
// dom.js
~function(R) {
 // 辅助函数...
 // DON模块定义...
 // 暴露出模块给 R
 R.dom = dom
}(RUI);

这里的匿名函数执行后把API对象暴露给了RUI,无论匿名函数内干了多少活,对应匿名函数外是看不到的,也是没有必要去理会的。最终关心的是公开的 API 方法,只要了解这些方法的参数及意义就可以马上使用它了。

语义5:匿名函数处理某些特殊效果如处理一些数据又不想暴露过多的变量

// 判断IE版本的hack方式
var IEVersion = function() {
 var undef, v = 
 var p = document.createElement('p')
 var all = p.getElementsByTagName('i')
 while (
p.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
all[]
);
 return v > ? v : undef
}();

最终只要一个结果 IEVersion,匿名函数内部用到了一些局部变量全部可以隔离开。这种方式对于一些临时性的数据加工非常有效,紧凑。【相关推荐:JavaScript视频教程】

热心网友 时间:2022-04-22 11:55

!function跟(function(){... })();函数意义相同,叫做立即运行的匿名函数(也叫立即调用函数)。

js中可以这样创建一个匿名函数:

(function(){do something...})()

//或

(function(){do something...}())

而匿名函数后面的小括号()是为了让匿名函数立即执行,其实就是一个函数调用。

这样写会报错:

function(){alert(1)}()

因为function前面没有(或者! ~之类的运算符,js解析器会试图将关键字function解析成函数声明语句,而不是函数定义表达式。

作为组运算符,小括号()会将其内部的表达式当成一个整体,然后返回结果,所以定义一个匿名函数正确的格式就是用小括号将函数体括起来。

同样的! ~ + -等运算符也有同样的效果,这是因为匿名函数也是一种值,这些运算符会将后面的函数体当成一个整体,先对匿名函数进行求值,然后在对结果进行运算。

不过这些运算符虽然能够达到让匿名函数立即执行的目的,但是要小心他们是有副作用的,比如:

!function() {return 1}()//false

~function() {return 1}()//-2

-function() {return false}()//0

-function() {return false}()//0

没错,他们会对函数的返回值进行运算,这样可能会导致最终的结果和你想要的结果不一样。当然,对于那些没有返回值的函数来说,当然是没有什么影响了。

扩展资料:

匿名函数的调用:

var abc=function(x,y){

return x+y;

}

alert(abc(2,3)); // "5"

上面的操作其实就等于换个方式去定义函数,这种用法是我们比较频繁遇到的。

例如我们在设定一个DOM元素事件处理函数的时候,我们通常都不会为他们定名字,而是赋予它的对应事件引用一个匿名函数。

使用()将匿名函数括起来,然后后面再加一对小括号(包含参数列表)。

alert((new Function("x","y","return x*y;"))(2,3));// "6"

参考资料来源:百度百科-JavaScript



热心网友 时间:2022-04-22 13:13

( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,要理解立即执行函数,需要先理解一些函数的基本概念。

函数声明:

function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明。

函数表达式:

var fnName = function () {…};使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式。

匿名函数:

function () {}; 使用function关键字声明一个函数,但未给函数命名,所以叫匿名函数,匿名函数属于函数表达式,匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或创建闭包等等。

函数声明和函数表达式不同之处在于:

一、Javascript引擎在解析javascript代码时会‘函数声明提升'(Function declaration Hoisting)当前执行环境(作用域)上的函数声明。

而函数表达式必须等到Javascirtp引擎执行到它所在行时,才会从上而下一行一行地解析函数表达式。

二、函数表达式后面可以加括号立即调用该函数,函数声明不可以,只能以fnName()形式调用。

在function前面加!、+、 -甚至是逗号等到都可以起到函数定义后立即执行的效果,而()、!、+、-、=等运算符,都将函数声明转换成函数表达式。

消除了javascript引擎识别函数表达式和函数声明的歧义,告诉javascript引擎这是一个函数表达式,不是函数声明,可以在后面加括号,并立即执行函数的代码。

扩展资料

作用:

javascript中没用私有作用域的概念,如果在多人开发的项目上,你在全局或局部作用域中声明了一些变量,可能会被其他人不小心用同名的变量给覆盖掉。

根据javascript函数作用域链的特性,可以使用这种技术可以模仿一个私有作用域,用匿名函数作为一个“容器”。

“容器”内部可以访问外部的变量,而外部环境不能访问“容器”内部的变量,所以( function(){…} )()内部定义的变量不会和外部的变量发生冲突,俗称“匿名包裹器”或“命名空间”。

JQuery使用的就是这种方法,将JQuery代码包裹在( function (window,undefined){…jquery代码…} (window)中,在全局作用域中调用JQuery代码时,可以达到保护JQuery内部变量的作用。

热心网友 时间:2022-04-22 14:48

叹号后面跟函数!function
和加号后面跟函数+function
都是跟(function(){})();这个函数是一个意思,都是告诉浏览器自动运行这个匿名函数的,因为!+()这些符号的运算符是最高的,所以会先运行它们后面的函数

热心网友 时间:2022-04-22 16:39

这种叫自执行函数表达式
在这种情况下,解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function声明。

// 下面2个括弧()都会立即执行

(function () { /* code */ } ()); // 推荐使用这个
(function () { /* code */ })(); // 但是这个也是可以用的

// 由于括弧()和JS的&&,异或,逗号等操作符是在函数表达式和函数声明上消除歧义的
// 所以一旦解析器知道其中一个已经是表达式了,其它的也都默认为表达式了

var i = function () { return 10; } ();
true && function () { /* code */ } ();
0, function () { /* code */ } ();

// 如果你不在意返回值,或者不怕难以阅读
// 你甚至可以在function前面加一元操作符号

!function () { /* code */ } ();
~function () { /* code */ } ();
-function () { /* code */ } ();
+function () { /* code */ } ();

热心网友 时间:2022-04-22 18:47

基本上就是吓唬人的意思!
还有比如x=x||{};
(function(){})();
没什么屁大的用!就是酷一点而已!
javascript 中“!function(){}() ” 是什么意思

自执行函数javascript中,这种写法 function(){ //所需要执行的代码 }()被称为"自执行函数",好处是把所有变量都运行在函数内部,可以避免产生全局变量。!隔绝上面代码的影响而"!"的作用是使它和上面的代码隔绝,不会受到其影响。例如 这2行代码 var a=1 function(){}()在浏览器执行会产生语法错...

javascript中function 是什么意思

表面意思就是函数、方法的意思

javascript 的 "!function" 是什么意思?

!function跟(function(){... })();函数意义相同,叫做立即运行的匿名函数(也叫立即调用函数)。js中可以这样创建一个匿名函数:(function(){do something...})()//或 (function(){do something...}())而匿名函数后面的小括号()是为了让匿名函数立即执行,其实就是一个函数调用。这样写会报错:...

js中的function是什么意思?

在JavaScript中,function是一种用来封装可重用代码的方式。相当于一种特殊的对象,可以实现对代码的组织和封装。创建一个function后,就可以通过调用它来执行其中封装的代码,从而实现代码的重复使用。Function在JavaScript中具有许多特性。比如函数可以接收传入的参数,并在函数体内对其进行处理;函数可以返回一个...

javascript 中“!function(){}() ” 是什么意思?

( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,要理解立即执行函数,需要先理解一些函数的基本概念。函数声明:function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明。函数表达式:var fnName = function () {…};...

JAVAscript里面的function标签是干什么的?

function是函数的意思吧!就是标记这是一个函数的意思!具体的资料我没有,可以上网去查,不过声明函数都要用到function!

求教:jsp function的意思及用法

function是javascript里的东西 意思大概是定义一个方法 方法名是function后面的名字 括号里的是参数 例如 function submit ( )定义方法 方法名 参数 { 方法体 } 定义方法是根据你的需要来的 就像我这个例子 就是提交的意思 把表单里的东西通过JavaScript提交....

javascript中: (function(){})();如何理解?

javascript中: (function(){})()是匿名函数,主要利用函数内的变量作用域,避免产生全局变量,影响整体页面环境,增加代码的兼容性。(function(){})是一个标准的函数定义,但是没有复制给任何变量。所以是没有名字的函数,叫匿名函数。没有名字就无法像普通函数那样随时随地调用了,所以在他定义完成后就...

请看这段javascript是什么意思,谢谢。在线等

这个整个意思就是他先new了一个js内置的Date的实力,但是没看到哪里用到了 然后自己又写了一个date函数,这里的this指的是date这个函数,也就是说让date的参数的length等于这个function自己实例的length 然后用个循环让date的实例中(前面说过了可以让这个实例当数组的)第i+1个元素等于第i个参数 然后...

javascript 中function 的这种用法是什么意思?

(function(b){ alert(b);return function(c){ alert(c);};})('hello')('world'); 还有一段也很诡异: (function(a){ alert(a);return arguments.callee;})('a')('b')('c')('d')('e')('f');//事实上后面可以无限连续调用下去 ...

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果手机扣费限额在哪里修改? 黑茶和绿茶的功效区别,黑茶、绿茶功效简述 黑茶和绿茶哪个好 黑茶和绿茶的功效区别,二者功效各有侧重点! 订了陕西联通手机名片业务,一天内我三次或多次拨同一电话,系统是否会连 ... 陕西联通手机名片平台还有哪些业务附加费用? 什么是企业协同战略 吸烟指数中国吸烟市场及状况 我也想开家快递公司额,想向你取点经,需不需要自己的货车啊,还是用物流... 苹果手机怎么做到一边通话一边录音 在js中function()是什么意思?一般是什么情况下用?新手求大神详细解释... javasript中的function(){}是什么? 哪种软件能够提高视频的清晰图分辨率 请问有什么方法把视频提高清晰度? 有没有视频无损放大软件,因为网上的视频一般都不清晰,想找个软件提高分辨率,谁知道,满意的话追加奖励! 哪一个视频软件可以提高视频画质,跪求!! 有什么可以提高视频画质的软件或方法啊 有没有软件可以将视频的清晰度提高和改变音质的? 有没有提高视频清晰度的软件? 提高视频的清晰度的软件 有什么软件能提升视频的清晰度? 有什么视频处理软件 可以提高画质的呢? 有没有那种能将视频画质提高的手机软件,可以说几个名字不? 什么软件可以把视频画质变清晰? 小猪佩奇一家四口名字是什么? 小猪佩奇的角色介绍 朱佩琪是男的还是女的? 佩奇是男的还是女的?央视少儿频道播出过小猪佩奇吗? 《小猪佩奇》乔治和佩奇代表什么? 小猪佩奇是男是女? 求教:jsp function的意思及用法 java 里的fun()方法是什么意思 这段代码function, 三个参数有什么意思, click(function()是什么意思? (function($){...})(jQuery)是什么意思 pravite classname function(){} 在java中 函数前面加上这个类的名字是什么意思啊 请问java里的回调函数是什么意思 java.javascript问题:$(document).ready(function(){})的作用是什么... java中函数返回类型是啥意思啊 function中的参数“e”是什么意思 java中 method是什么意思 请问java中类名.方法名().方法名()是什么意思? 单位食堂存在问题及整改措施有哪些? 菜品估清多了整改方案怎么写 餐厅包厢服务分工不明确的整改措施 西单大悦城全部餐饮商户闭店整改,整改内容包括哪些方面? 如家酒店前台服务差评整改方案 学校食堂餐饮经营存在的问题及整改措施 针对大众点评整改完善及提升方案怎么写 整改方案和整改措施怎么写?