如何查找页面javascriptsublime查找函数定义义

创建函数的最常用的两个方法
服务器君一共花费了94.682 ms进行了3次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议
在ECMAScript中,创建函数的最常用的两个方法是函数表达式和函数声明,两者期间的区别是有点晕,因为ECMA规范只明确了一点:函数声明必须带有标示符(Identifier)(就是大家常说的函数名称),而函数表达式则可以省略这个标示符:
函数声明:
function 函数名称 (参数:可选){ 函数体 }
函数表达式:
function 函数名称(可选)(参数:可选){ 函数体 }
所以,可以看出,如果不声明函数名称,它肯定是表达式,可如果声明了函数名称的话,如何判断是函数声明还是函数表达式呢?ECMAScript是通过上下文来区分的,如果function foo(){}是作为赋值表达式的一部分的话,那它就是一个函数表达式,如果function foo(){}被包含在一个函数体内,或者位于程序的最顶部的话,那它就是一个函数声明。
function foo(){} // 声明,因为它是程序的一部分
var bar = function foo(){}; // 表达式,因为它是赋值表达式的一部分
new function bar(){}; // 表达式,因为它是new表达式
(function(){
function bar(){} // 声明,因为它是函数体的一部分
还有一种函数表达式不太常见,就是被括号括住的(function foo(){}),他是表达式的原因是因为括号 ()是一个分组操作符,它的内部只能包含表达式,我们来看几个例子:
function foo(){} // 函数声明
(function foo(){}); // 函数表达式:包含在分组操作符内
(var x = 5); // 分组操作符,只能包含表达式而不能包含语句:这里的var就是语句
} catch(err) {
// SyntaxError
你可以会想到,在使用eval对JSON进行执行的时候,JSON字符串通常被包含在一个圆括号里:eval('(' + json + ')'),这样做的原因就是因为分组操作符,也就是这对括号,会让解析器强制将JSON的花括号解析成表达式而不是代码块。
{ "x": 5 }; // "{" 和 "}" 做解析成代码块
} catch(err) {
// SyntaxError
({ "x": 5 }); // 分组操作符强制将"{" 和 "}"作为对象字面量来解析
表达式和声明存在着十分微妙的差别,首先,函数声明会在任何表达式被解析和求值之前先被解析和求值,即使你的声明在代码的最后一行,它也会在同作用域内第一个表达式之前被解析/求值,参考如下例子,函数fn是在alert之后声明的,但是在alert执行的时候,fn已经有定义了:
alert(fn());
function fn() {
return 'Hello world!';
另外,还有一点需要提醒一下,函数声明在条件语句内虽然可以用,但是没有被标准化,也就是说不同的环境可能有不同的执行结果,所以这样情况下,最好使用函数表达式:
// 千万别这样做!
// 因为有的浏览器会返回first的这个function,而有的浏览器返回的却是第二个
if (true) {
function foo() {
return 'first';
function foo() {
return 'second';
// 相反,这样情况,我们要用函数表达式
if (true) {
foo = function() {
return 'first';
foo = function() {
return 'second';
函数声明的实际规则如下:
函数声明只能出现在程序或函数体内。从句法上讲,它们 不能出现在Block(块)({ ... })中,例如不能出现在 if、while 或 for 语句中。因为 Block(块) 中只能包含Statement语句, 而不能包含函数声明这样的源元素。另一方面,仔细看一看规则也会发现,唯一可能让表达式出现在Block(块)中情形,就是让它作为表达式语句的一部分。但是,规范明确规定了表达式语句不能以关键字function开头。而这实际上就是说,函数表达式同样也不能出现在Statement语句或Block(块)中(因为Block(块)就是由Statement语句构成的)。
延伸阅读此文章所在专题列表如下:
本文地址:,欢迎访问原出处。
不打个分吗?
转载随意,但请带上本文地址:
如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 。
大家都在看
阅读一百本计算机著作吧,少年
吴军 (作者)
近一百多年来,总有一些公司很幸运地、有意识或无意识地站在技术革命的浪尖之上。在长达十年甚至几十年的时间里,它们代表着科技的浪潮,直到下一波浪潮的来临。从19世纪末算起,AT&T公司、IBM公司、苹果公司、英特尔公司、微软公司、思科公司、雅虎公司和Google公司都先后被幸运地推到了浪尖。虽然,它们来自不同的领域,中间有些已经衰落或正在衰落,但是它们都极度辉煌过。吴军的这本《浪潮之巅》系统地介绍了这些公司成功的本质原因及科技工业一百多年的发展。在这些公司兴衰的背后,有着它必然的规律。《浪潮之巅》不仅讲述科技工业的历史,更重在揭示它的规律性。
扫一扫,在手机上阅读
栏目最新博文
25,856 views
18,219 views
15,936 views
13,459 views
13,523 views
11,661 views
16,805 views
12,931 views
12,447 views
12,954 views
栏目博文推荐
6,397 views
38,196 views
4,079 views
4,081 views
5,615 views
13,523 views
8,194 views
3,349 views
7,345 views
31,455 views
任何一件事情,只要你认真去做,总是能够变得简单的。
1,951 views
关于网站与作者
互联网信息太多太杂,各互联网公司不断推送娱乐花边新闻,SNS,微博不断转移我们的注意力。但是,我们的时间和精力却是有限的。这里是互联网浩瀚的海洋中的一座宁静与美丽的小岛,供开发者歇息与静心潜心修炼(愿景)。
“Veda”的本义是知识、启示,希望这里能为开发者提供充足的技术资料。
我的电子邮件gonnsai(,腾讯微博:,欢迎与我联系。& & 今天在犀牛书上发现了一个有用的函数 urlArgs(提取URL的搜索字符串中的参数)。我们经常会看到有的页面链接地址后面会跟有参数,比如 /?username=yyy&password=zzz 之类的,很多时候我们需要获得这些参数的值(yyy和zzz),那么就可以利用 urlArgs 函数,通过该函数的返回值(返回值是对象)的属性来获取。& & urlArgs 函数代码:& & 复制代码代码如下:& & function urlArgs(){& & var args = {};& & var query = location.search.substring(1);& & var pairs = query.split('&');& & for(var i = 0; i < pairs. i++){& & var pos = pairs[i].indexOf('=');& & if(pos == -1)& & var name = pairs[i].substring(0,pos);& & var value = pairs[i].substring(pos + 1);& & value = decodeURIComponent(value);& & args[name] =& & }& && & }& & 使用方法:& & 复制代码代码如下:& & var args = urlArgs();& & var username = args. //yyy& & var password = args. //zzz& & 您可能感兴趣的文章:JavaScript解析URL参数示例代码JavaScript表达式:URL 协议介绍javascript通过url向jsp页面传递中文参数导致乱码解决方案javascript. Ajax获取远程url的返回判断Javascript操作URL函数修改版& & QQ空间
百度搜藏更多& & Tags:提取URL 搜索 参数& & 复制链接收藏本文打印本文关闭本文返回首页& & 上一篇:js 关键词高亮(根据ID/tag高亮关键字)案例介绍& & 下一篇:html文本框提示效果的示例代码& & 相关文章javawscript. 三级菜单的实现原理js判断样式className同时增加class或删除classJquery对数组的操作技巧整理JS实现div居中示例[HTML/CSS/Javascript]WWTJS在Javascript中为String对象添加trim,ltrim,rtrim方法JS实现简单的Canvas画图实例javascript客户端生成MD5值的函数代码js中split函数的使用方法说明获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Ch& & 文章评论& & 最 近 更 新& & 用js判断页面刷新或关闭的方法(onbeforeu动态加载脚本提升javascript性能JS应用之禁止抓屏、复制、打印iframe. 父窗口和子窗口相互的调用方法集锦解析img图片没找到onerror事件 Stack ovejs获取 type=radio 值的方法JS跨域总结JavaScript中的onerror事件概述及使用js 调整select 位置的函数javascript读写json示例& & 热 点 排 行& & js刷新页面方法大全清除网页历史记录,屏蔽后退按钮js中cookie的使用详细分析javascript深入理解js闭包JS鼠标事件大全 推荐收藏Javascript. 的addEventListener(js验证表单大全js 获取浏览器高度和宽度值(多浏js 字符串操作函数比较全的JS checkbox全选、取消全
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
上一篇:下一篇:
相关经验教程
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益点击网页中的一个按钮,找到该按钮触发的javascript事件的方法代码_百度知道
点击网页中的一个按钮,找到该按钮触发的javascript事件的方法代码
并且找到该这个方法。为了这个问题我花了很长时间都没找到,希望大神能给指点迷津,该按钮绑定了javascript方法比如一个网站上的网页里有一个按钮,点击该按钮就会触发一个javascript方法,不胜感激,我就想找到该按钮绑定的javascript方法写在哪个js文件里,查看里面写的代码
提问者采纳
可以使用ie的调试器F12点开F12,然后在页面上点击按钮,然后点击“开始配置文件”,选择探查器
请问IE8里有没有探查器,我的电脑是xp的,装不了ie9
ie8以上的调试器都有
一下子跳出来上百个函数,url地址和行号都是空的,怎么找到触发的那个事件的函数及代码。
双击就可以自动跳到相应的代码位置去啊,可以私信我
提问者评价
虽然没有找到,但这个方法确实是找js函数的好办法。
其他类似问题
为您推荐:
其他3条回答
标签吧..js”找到这个js文件.在这个网页里面有&lt.;script&gt,在这个标签里面有 src=“ .,打开然后ctrl +f 查找这个方法名就找到了 如果你是在网上找的话 一般的浏览器不会下载 js文件
我用过ctrl +f 没有找到,我把该网页所有文件下了下来, 这里是这个按钮的源代码&a class=&next ct& href=&& title=&下一条&&下一条&&#47;a&, 是跳转到下一条的,href里的链接地址没有起作用,这个地址是这个该网页得链接地址,而我点击该按钮他会跳转到下一条的,(字数限制没写完)
你的下一条的代码是这样吧&a class=&next ct& href=&#& title=&下一条&&下一条&&#47;a&你在js里面找
关联的代码
右键查看元素不行吗?根据按钮的id 来查找,我一般用火狐查看
不行,这个方法不行,我把按钮的id复制下来,然后按ctrl+F在每个js文件里找了一遍也没有找到,而且这个网页的每个js文件代码都是非常长的,一个一个找也不现实。
ctrl+H&搜索不行吗
没有找到,估计是没有用那个标签的id号, 用的可能是jquery的选择器,或者其他选择标签的方法,并没有直接用这个标签的id号。
那你搜索其他的看看,贴个代码我看看,就button的
按钮的源代码&a class=&next ct& href=&& title=&下一条&&下一条&&#47;a&,这个herf链接地址没有起作用的,href里的链接是该网页的地址。点击下一条它会跳到下一条的内容的。
是不是用class选择器
一个一个找,太不现实了,很多网站的js文件很多,很长,也很乱这样不容易找。我想知道有什么软件,直接捕捉到触发的那个事件,然后给你显示出那个事件的javascript代码。
这个我没接触过,抱歉,帮不上你了
谢谢你耐心帮我想了这么多。
找到元素的ID或者Name。或者TypeName.注册事件可能是这些东西来注册的。然后查看一下页面的引用。可能是从其他页面引入的JS
javascript的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁&&&& 在Javascript中函数实际上就是一个对象,具有引用类型的特征,所以你可以将函数直接传递给变量,这个变量将表示指向函数&对象"的指针,例如:
function test(message){
alert(message);
f('hello world');
你也可以直接将函数申明赋值给变量:
var f = function(message){
alert(message);
f('hello world');
&&&& 在这种情况下,函数申明中可以省略函数名称,因为此时名称已经没有任何意义,我们可直接通过变量f来调用函数。
&&&& 通过Function类型,我们可以更好地理解函数即对象:
var f = new Function("message","alert(message);");
f('hello world');
&&&& this可以看成调用函数的实际作用域上下文。比较以下函数的执行结果:
function test(){
this.property = 'hello world';
alert(window.property);
//由于在全局范围内调用,test函数中的this实际指向全局对象(window)
var obj = {};
test.call(obj);
//通过call第一个参数指定执行上下文范围,所以test函数中this指向obj实例。
alert(obj.property);
var obj2 = {};
obj2.test2 =
//将obj2实例方法test指向 全局test方法
obj2.test2();
//由于是在obj2上调用test方法,所以test函数中的this也指向了obj2实例
alert(obj2.property);
&&&& 在Javascript中可以定义构造函数,构造函数与一般函数没有任何区别,在创建实例时,如果我们使用了new关键字,那么这个函数就具有构造函数的特性,否则就是一般函数,如下所示,我们定义了一个Person类型:
function Person(){
this.name = 'xfrog';
this.Say = function(){
alert(this.name);
&&&& 当使用new关键字时,可以创建一个新的Person对象实例:
var p1 = new Person();
&&&& 如果不使用new关键字,将直接执行Person函数,由于执行上下文为全局范围,故name属性和Say方法将被添加到window对象:
window.Say();
&&&& 注意上述Person的定义方式,当使用new来创建Person实例时,将会执行Person构造函数,也就是会声明name属性和Say方法,这样可能产生效率问题,注意以下代码:
var p1 = new Person();
var p2 = new Person();
var test = p1.Say == p2.S
&&&& 比较p1和p2两个Say函数指针,返回false,表示每个Person实例中的Say方法都是独立的,而事实上Say函数的功能是完全一样的,我们完全没有必要为每个对象重新分配Say函数&对象&,如果Person实例很多,将会造成大量的内存耗用。
&&&& 如果将Say函数提取出来放入全局执行范围,似乎可解决次问题:
function Person(){
this.name = 'xfrog';
this.Say =
function say(){
alert(this.name);
var p1 = new Person();
var p2 = new Person();
alert(p1.Say == p2.Say);
p1.name = 'wang';
&&&&& 由于this始终和执行上下文相关,p1和p2实例中的Say方法中会正确地返回对应实例的name属性。但是,使用此方式有违面向对象的思想,也失去了类型密封的原则。还会造成大量的全局函数。
&&&& 为了解决这些缺点,Javascript引出了原型的概念,简单理解,原型可以看成是类型的共享区,原型本身是一个对象,而对象中的属性对于类型来说是共享的。Javascript中每个类型通过prototype属性来表示原型,通过这个属性可指定共享方法:
function Person(){
Person.prototype.name = 'xfrog';
Person.prototype.Say = function(){
alert(this.name);
var p1 = new Person();
var p2 = new Person();
alert(p1.Say == p2.Say);
//返回true
&&&& 为什么这里可以通过p1.Say来访问Say方法呢?这是因为ECMAScript标准规定了类型属性的查找顺序:先在类型的实例上查找,如果没有则继续在类型原型上查找,这一查找路径采用短路算法,即找到首个后即返回,考虑如下代码:
function Person(){
this.name = 'wang';
Person.prototype.name = 'xfrog';
Person.prototype.Say = function(){
alert(this.name);
var p1 = new Person();
//将返回wang
&&&& 上面提到prototype实际上是一个对象,那么我们是否可以直接访问呢? 在一些浏览器实现(如Chrome、Fixfox等)的确可通过实例的__proto__属性来访问内部的prototype对象,这种特征表明Javascript引擎在每个对象的内部都是通过一个变量来保存对prototype的引用,这保证了prototype对应整个类型的实例来说是共享的,例如,你可在Chrome浏览器内使用如下方式来访问Say方法:
p1.__proto__["Say"]();
&&&& 由于原型是一个对象,我们可以直接将一个对象赋值给prototype:
function Person(){
Person.prototype = {name:'xfrog', Say:function(){
alert(this.name);
&&&& 注意这个方式下,实际上是完全替换了Person的prototype,这与上面Person.prototype.name方式还是有细微差异的,这是因为任何类型,Javascript引擎都会添加默认的prototype,在这个prototype中包含一个对构造函数的引用,即原型对象属性constructor,所以通常使用替代prototype方式时,我们需要手动加上constructor属性:
Person.prototype = {
constructor: Person,
name :'xfrog',
Say:function(){
alert(this.name);
&&&& 注意,由于prototype对于整个类型是共享的,那么在prototype中的引用类型可能会存在问题,前面的Say函数作为一个对象,也是引用类型,所以每个实例中的Say都指向原型对象中的同一个函数,这本身没有问题,也是我们使用原型的初衷,但对于其他引用对象,可能结果并不是我们想要的:
function Person(){
Person.prototype = {
name: 'xfrog',
obj : { age: 18 },
Say : function(){
alert(this.obj.age);
var p1 = new Person();
var p2 = new Person();
p1.obj.age = 20;
&&&&& p2.Say返回的是20,这是因为obj属性作为原型属性是共享的,在内存中只存在一个实例,所以通过p1修改后,p2只能得到修改后的状态。如果要避免此情况,可将obj属性放到实例中:
function Person(){
this.obj = { age: 18 };
阅读(...) 评论()

我要回帖

更多关于 javascript函数定义 的文章

 

随机推荐