首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

'var foo = function ...'和'function foo()......之间的区别

var foo = function ... 和 function foo()... 之间的区别是:

  1. 语法形式:var foo = function ... 是使用变量声明的方式来定义一个函数表达式,而 function foo()... 是使用函数声明的方式来定义一个函数。
  2. 变量提升:使用函数声明方式定义的函数会在代码执行之前进行变量提升,可以在函数声明之前调用该函数。而函数表达式定义的函数则不会进行变量提升,只能在定义之后才能调用。
  3. 函数名称:函数声明方式定义的函数会自动获得一个函数名称,可以在函数内部和外部使用该名称来调用函数。而函数表达式定义的函数可以选择性地给函数赋予一个名称,该名称只能在函数内部使用。
  4. 函数作用域:函数声明方式定义的函数的作用域是整个代码块,可以在函数内部和外部访问函数。而函数表达式定义的函数的作用域是定义所在的代码块,只能在函数内部访问函数。
  5. 匿名函数:函数表达式可以是匿名函数,即没有函数名称的函数表达式。而函数声明方式定义的函数必须有函数名称。
  6. 函数表达式的灵活性:函数表达式可以根据需要在任何地方定义和调用,可以作为参数传递给其他函数,也可以作为其他函数的返回值。而函数声明方式定义的函数只能在全局作用域或函数作用域中定义和调用。

总结:var foo = function ... 和 function foo()... 之间的区别在于语法形式、变量提升、函数名称、函数作用域、匿名函数和灵活性等方面的差异。具体使用哪种方式取决于代码的需求和设计。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

解释函数 foo() {} var foo = function() {} 之间 foo 用法差异

在 JavaScript 中,我们有不同方法来定义函数。函数 foo() {} var foo = function() { } 是定义函数两种不同方法。...这两种方式都有其优点不同用例;但是,两者在执行函数时给出相同结果。 因此,本教程将教我们定义函数两种方法之间区别。...      var foo = function() { } 解释:函数表达式 var foo = function() { } 也与定义函数相同,称为函数表达式...var foo = function (params) {        // function body }; 在上面的语法中,函数是在没有名称情况下定义,因此我们可以将其称为匿名函数。...() { } var foo = function() { } 之间区别 下表突出显示了函数 foo() { } var foo = function() { } 之间主要区别: 函数 foo

1.2K10

var fn = function(){ }function fn() { }有什么区别

但函数表达式变量表达式只是将函数或者变量声明提升到函数顶部,函数表达式变量初始化不会被提升。 var fn = function(){ } 这种叫做函数表达式,必须先定义后使用。...var fun = function(){     console.log("前端资源网"); } fun(); 以上是没有任何问题,我们把声明使用颠倒位置: fun(); var fun = function...不声明 fun 报错是不一样,其实 fun 也是一个变量,只不过他是 function () { console.log(“前端资源网”);} 一个引用,fun 声明被提升了,但是初始化没有被提升...再给大家来一个比较有趣关于提升例子: var a = 1; (function () {     console.log(a);     var a = 2;     console.log(a)...参考文档: var js=function(){}function js(){}区别 (adsbygoogle = window.adsbygoogle || []).push({

1.9K10

jQuery(function(){})与(function(){})(jQuery)区别

三、总结 jQuery(function(){ });用于存放操作DOM对象代码,执行其中代码时DOM对象已存在。...(function(){ })(jQuery);用于存放开发插件代码,执行其中代码时DOM不一定存在,所以直接自动执行DOM操作代码请小心使用。 补充: (function($){...})...这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写上括号实参,由于操作符优先级,函数本身也需要用括号,即: (function(arg){...})...(param) 这就相当于定义了一个参数为arg匿名函数,并且将param作为参数来调用这个匿名函数 而(function($){...})...(jQuery)则是一样,之所以只在形参使用$,是为了不与其他库冲突,所以实参用jQuery ,上述也可以这样写:var fn = function($){....}; fn(jQuery);

838100

$(document).on$(#idname).on$(function(){ })区别

$(function(){ })使用   JQuery 代码我们通常会包裹在一个(function(){})函数中,jq (function(){})也就是 $(function () {...DOM 文档加载步骤: 解析 HTML 结构 加载外部脚本样式文件 解析并执行脚本代码 执行 $(function(){}) 内对应代码 加载图片等二进制资源 页面加载完毕,执行 window.onload...$().click()用法一样,最大区别即优点是如果动态创建元素在该选择器选中范围内是能触发回调函数。...$().bind()直接绑定在元素上,click,blur,mouseon一样点击事件。     $().live()是通过冒泡方式来绑定到元素上。...触发事件时,jQuery会按照绑定先后顺序依次执行绑定事件处理函数。   3. 阻止事件冒泡事件委托方法:     A:return false。

2.1K20

简单说下,(function(){...})() 与 (function(){...}()) 有什么区别

大周末写太长了也没人看,标题所提问,其实没有区别function xxx(){...},这是一个函数,解释器知道了,但并不运行它; xxx(),解释器遇到它就会执行它。...IIFE写法好处: 1,普通写法代码多,并且定义执行不在一起; 2,占用命名空间; 不想给某些函数起名,又想让它立即执行,那怎么办呢?...简单啊,将之转化为表达式,加个()呗,变成这样, (function xxx(){console.log('xxx')})(); 那既然都立即执行了,干脆函数名也不要了吧,于是, (function (...因为IIFE搞了一个新作用域,你代码碰不到全局对象了。 什么是IIFE? 立即执行函数表达式 IIFE(Immediately-invoked function expression)

83460

你所不知道foo“bar”

流传在文档间程序员默契 “foo“foobar”等单词经常会作为示例名称出现在各种程序技术文档中。据统计,在各种计算机通信技术文档中,大约有百分之七文档出现了这些词语。...不过英文文法能接纳Holmanfoo”这个编造单词,也是受了犹太语中“feh”英文中“fooey”及 “fool”影响。...在随后二战中,因为英美士兵经常 用俚语粗话交流,“foo”一词就被更广泛传开了。人们把被雷达追踪到神秘飞行物称为“foo战机”(“foo fighter”),就是后来所谓UFO。...术语 foobar , foo , bar , baz qux 经常在计算机编程或计算机相关文档中被用作 占位符 名字。...所以说helloworld是用于输出测试文本, foobar就是两个常用变量名, 这又让我想起了两个常见对象引用: BobAlice(亲切吧,这两个咚咚也曾经迷惑过我!)

18.4K114

varletconst区别

let const是 ES6 新增命令,用于声明变量,这两个命令跟 ES5 var有许多不同,并且 let const也有一些细微不同,再认真阅读了阮一峰老师文档后,发现还是有一些不知道细节...本文中提到链接,因为微信限制,没有显示出来,查看文中链接,需要点击最下方阅读原文链接 博客、前端积累文档、公众号、GitHub 内容: var let/ const区别 块级作用域 不存在变量提升...这带来很多不合理场景: 内层变量可能覆盖外层变量 用来计数循环变量泄露为全局变量 var tmp = new Date(); function f() { console.log(tmp); /...// var 情况 console.log(foo); // 输出undefined var foo = 2; // let 情况 console.log(bar); // 报错ReferenceError...var let/ const区别: 块级作用域 不存在变量提升 暂时性死区 不可重复声明 let、const声明全局变量不会挂在顶层对象下面 const命令两个注意点: let可以先声明稍后再赋值

37110

闭包(Closure)匿名函数(Anonymous function)lambda表达式区别

闭包(Closure)匿名函数(Anonymous function)/lambda表达式区别 函数最常见形式是具名函数(named function): function foo(){...console.log("named function") } foo() 不过也可以将函数视作数据赋值给变量,这样函数可以没有名字: nameless = function(){ console.log...而闭包(closure)是作用域在一个环境内闭合函数,举个例子: function outer(){ var a = 10; function inner(){ console.log...闭包可以具名也可以匿名,上面是具名形式,可能在很多编程语言无法实现,也可以使用下面的匿名形式: function outer(){ var a = 10; return function...inner(){ console.log(a); }; } outer()() 所以两个是不相同但是相关概念,总结来说: lambda是没有名字函数,等价于匿名函数 闭包是作用域闭合于外部函数环境函数

1.3K10

stdboostfunction与bind实现剖析

用过stdboostfunction对象bind函数童鞋们都知道这玩意用起来腰不酸了,腿不疼了,心情也舒畅了。...然后是function对象 function对象也上是有几个疑问点: function对象是固定大小、固定类型,如何关联多种对象函数?...image.png 图12: function小对象成员函数/变量functor数据保存 image.png ​ 图13: function大对象数据保存 另外在VCGCC实现里,都利用自身特性进行了一系列简化...简单来说,function实现原理就是模拟了C++编译器虚函数表,对外提供统一类型接口。这样在我们拿它来做回调监听事件响应时候就可以简单地提供一组接口。...functionbind主要实现原理就是这些,如果各位大神发现哪里不对,还请指正。

1.8K10

stdboostfunction与bind实现剖析

用过stdboostfunction对象bind函数童鞋们都知道这玩意用起来腰不酸了,腿不疼了,心情也舒畅了。...然后是function对象 function对象也上是有几个疑问点: function对象是固定大小、固定类型,如何关联多种对象函数? 复制function时,为什么会导致其关联对象也复制?...以上,就是问题1问题3解决方案。至于问题3中区分成员函数虚函数部分,可以参照我之前一篇分享《VCGCC成员函数指针实现研究》。 至于function复制时如何发生?...图片 图12: function小对象成员函数/变量functor数据保存 图片 图13: function大对象数据保存 另外在VCGCC实现里,都利用自身特性进行了一系列简化,使之占用内存更小...简单来说,function实现原理就是模拟了C++编译器虚函数表,对外提供统一类型接口。这样在我们拿它来做回调监听事件响应时候就可以简单地提供一组接口。

1K30

写给自己ObjectFunction3个灵魂拷问

ObjectFunction谁是谁实例 Object instanceof Function instanceof检查是右操作数prototype属性是否在左操作数原型链上。...FunctionObject鸡生蛋蛋生鸡? 有了上面这些复杂关系,我们不免要问问自己,到底是先有Object还是Function?...上面说[[Prototype]]指的是一个对象原型,与我们所熟知prototype是有区别的,prototype只是一个属性,是指向原型一个引用。...所以严格上来说,FunctionObject没有创建时间上先后顺序关系,与它们相比,先出现也是它们原型[[Prototype]]。...而在它们原型中,先有的是Object原型,后有的是Function原型。 FunctionObject没有所谓鸡生蛋蛋生鸡关系,它们之间是一种互相成就关系。

59020
领券