重操JS旧业第九弹:函数表达式】的更多相关文章

函数表达式,什么概念,表达式中的函数表达式. 1 函数申明 function 函数名([函数参数]){ //函数体 } js中无论像这样的显示函数什么放在调用之前还是调用之后,都不影响使用,因为js解释引擎会将函数声明提前化,这点很好理解: 2 函数表达式 var functionV=function 函数名([函数参数]){ //函数体 }: 这种方式的一个变量指向了一个函数,仅此而已.js引擎只会把他当作一个函数类型的变量来处理,仅此而已. 3 递归调用 我们知道函数名仅仅是指向函数的指针,…
一 数据类型 1 js中的数据类型 1.1 数据类型列举 1)number类型 2)boolean类型 3)string类型 4)对象类型 5)函数类型 6)undefined类型 1.2 数据类型获取 typeof :注意这个并不是一个函数,而是一个操作符,怎么使用? typeof 'asd'  结果:string instanceof:主要用在对象的类型检测上,因为typeof null的结果也是object,这个时候typeof在对象领域的类型检测就力不从心了, 比如:var date=n…
不管js被包装成什么样子,最终交给浏览器执行的js都是原生的,都离不开原生js的原理. Script标签纸html中用来加载js的标签,我们知道js可以是来自外部,本地,或者内部一段代码,在这里只讨论来自外部的加载,对于一个随时进行网络数据交换的浏览器而言,网络请求必然是异步执行的,自然的js文件一般来说异步执行比较好,不容易造成UI卡顿,但是Script标签默认加载js是同步,阻塞式的,也就是说默认情况下浏览器按照从上至下,从左自右的方式解释执行脚本,对于同步请求js文件会造成js文件下载完成…
函数在任何编程语言中起着非常重要的位置,因为他是功能的最小单元,在js中函数是一种类型 Function 1 申明与定义 显示声明:function cc(){};函数名其实是函数的一个指针,函数名某种意义上也就是function类型的一个变量,对于显示什么的函数,不管函数在文档什么位置都糊被js引擎预先加载到编译环境栈中: 也就是申明自动提前 函数表达式:var fun=function(){};对于表达式函数,起本质上变量指向了一个函数,但是呢,这个函数申明不会被提前加载到js引擎中提前编译…
数组在任何编程语言中都是非常重要的,因为函数在最大程度上代表了要实现的功能,而数组则是这些函数所要操作的内存一部分. 1 构建数组 js与其他非脚本语言的灵活之处在于要实现一个目标它可能具有多种方式,如数组的定义有2中,对象的定义一般也有2中,而类却又多种,花样很多,目的呢都是为了节省内存,适合不同应用场景 1)使用构造函数 var arr=new Array(); 2)使用字面量 var arr=[]; 2 检测数组类型 在前面我们已经有了非引用的typeof,其应用于所有类型,属于广谱类型检…
闭包是js最难理解,也是最蛋疼的一个名词,仿佛只可意会不可言传一样,有人说闭包说白了就是函数嵌套,也有人说闭包就是函数能够访问函数外部的变量,而内部的外部访问不了: 貌似都非常有道理,其实仔细想来只不过说到了闭包的一些表现特性,以及闭包存在的作用和道理. 好吧,真的是很难理解,以后理解了再写55555555555…
js里面没有语言语法层面的继承机制,但这并不意味着js就不能实现继承,利用js属性和方法动态性来模拟实现继承,通过总结大概有如下方法实现: 1 原型链继承 我们知道原型在对象中扮演着重要的角色,函数本身自带原型对象,通过对象创建便让对象拥有指向原型对象的指针,再次原型属性和方法的搜索覆盖机制,以及原型属性和方法的动态性 实现原理:手动将对象的原型对象修改为要继承的对象,如: function Person(name,sex){ this.name=name; Person.prototype.s…
JS是一种完全面向对象的程序设计语言,在面向对象处理方面,具有多种多样的实现方式,加之对象成员的动态性使得这门语言更加灵活:而js对象成员动态性也是创建和扩展对象的有力方式. 1 对象成员动态性 属性动态性:对于没有该成员属性的对象,可以直接采用赋值操作增加属性, 方法动态性:与属性动态性一样 比如:var obj=new Object(); 属性动态性:obj.name='ffs'; 方法动态性:obj.myThoed=function(){console.log('我是动态扩展的方法')};…
1 Date原理 Date类型表示时间,js中采用UTC国际协调时间,以1971年1月1日0分0秒0微秒开始,经过的毫秒数来表示时间,比如一年的时间计算 1分:1000*60: 1小时:1000(毫秒)*60*60: 1年:1000*60*60*24*365=31 536 000 000,如果是1千年则直接添加000,这就是js中时间的表示原理 2 转换 将字符串解析为时间 Date.parse():该函数将类似:‘6/23/2005’这类日期解析为毫秒数,如果不成功返回NaN: 然后再使用va…
BOM对象即浏览器内置对象,现今流行的浏览器内核有Safri,Firefox,Chrome,Opera,IE其中IE的兼容性是最蛋疼的在10及其过后还好点,但是现在IE基本上淘汰,而国内像360这种垃圾玩意儿包了个IE壳导出吹 真是不像样子,也不要脸. BOM对象在不同内核的浏览器,有很多兼容性问题,比如一些属性上等等,以及后面说的Dom更是很多差别. 1 全局作用域 window在SPA,单页面应用程序里面处于整个BOM树最顶端,也就是全局作用域的大哥,所有的对象都直接间接的寄宿在window…
在前面已经知道js中的类型有boolean,string,number,undefined,function,object,其中boolean,number,string为值类型.所谓的基本类型包装,是将基本类型中值类型包装为引用类型与之 相对应的是Boolean,Number,String,其主要作用为值类型增加相应的操作方法,因为值类型本身没有方法,方法是对象类型才具有的. 1包装原理 临时封装,如var str='hello';var str2=str.subString(2):llo;其…
当你声明类似function foo(){}或var foo = function(){}函数的时候,通过在后面加个括弧就可以实现自执行,例如foo(),看代码: // 因为想下面第一个声明的function可以在后面加一个括弧()就可以自己执行了,比如foo(), // 因为foo仅仅是function() { /* code */ }这个表达式的一个引用 var foo = function(){ return 1; }();//foo=1; // 是不是意味着后面加个括弧都可以自动执行?…
1.多种实现 // 下面2个括弧()都会立即执行 (function () { /* code */ } ()); // 推荐使用这个 (function () { /* code */ })(); // 但是这个也是可以用的 // 由于括弧()和JS的&&,异或,逗号等操作符是在函数表达式和函数声明上消除歧义的 // 所以一旦解析器知道其中一个已经是表达式了,其它的也都默认为表达式了 // 不过,请注意下一章节的内容解释 var i = function () { return 10;…
1.函数表达式与函数声明的区别 函数声明有“提升”(hoisting)的特性,而函数表达式没有.也就是说,函数声明会在加载代码时被预先加载到context中,而函数表达式只有在执行表达式语句时才会被加载 2.闭包 有权访问另一个函数作用域中的变量的函数.闭包可以访问另一个作用域中的变量,因此闭包得到的变量值是最终值,而不是该变量在某一时刻的值,有一个很经典的例子: function createFuns(){ var result = new Array(); for(var i = 0;i <…
定义函数的方式有2种: 函数声明 函数表达式 函数声明是最常用的,函数声明的一个特征就是:在执行代码之前,就已经读取了函数声明. 这个特征还有一个专门的术语:函数声明提升. 递归函数 所谓递归函数,就是在函数体中使用函数本身. 这就需要用到arguments.callee,他总是指向正在执行的函数,不论函数名怎么改变. function factorial(num){ if (num <= 1){ return 1; } else { return num * arguments.callee(…
1. 正确的写法 对于JavaScript 来说,括弧()里面不能包含语句,所以在这一点上,解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function声明 所以, 只要将大括号将代码(包括函数部分和在后面加上一对大括号)全部括起来就可以了. (function sayHello(){     alert("hello"); }()); 2.还有一种写法也可以, 就是将后面的大括号移出来: (function sayHello(){  …
js函数会根据上下文改变其含义. function double(x){return x*2;} 这是一个函数声明,也可以是一个命名函数表达式(named function expression),取决于它出现的地方. 声明一个函数,并绑定一个当前作用域的变量. 同一段函数代码也可以作为一个表达式. var f=function double(x){return x*2;} 根据ECMAScript规范,该函数绑定到变量f,而不是变量double.这里给函数表达式命名并不是必要的的,可以直接使用…
转自:汤姆大叔的博客 前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行.在详细了解这个之前,我们来谈了解一下"自执行"这个叫法,本文对这个功能的叫法也不一定完全对,主要是看个人如何理解,因为有的人说立即调用,有的人说自动执行,所以你完全可以按照你自己的理解来取一个名字,不过我听很多人都叫它为"自执行",但作者后面说了很多,来说服大家称呼为"立即调用的函数表达式". 本文英文原文地址:http:…
一.前言 Uncaught TypeError: ... is not a function function max(){}表示函数声明,可以放在代码的任何位置,也可以在任何地方成功调用: var max  = function(){};表示函数表达式,即将一个匿名函数赋值给一个变量,实现通过变量来调用这个匿名函数,但它需要在声明过后才能进行调用,如果调用在声明之前就会报如上红色字体的错误.而这在函数声明中不会出现这样的错误. 二.正文 (一).代码示例 //函数表达式 myFunc();//…
我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义"隐 藏"起来,外部作用域无法访问包装函数内部的任何内容. 例如: var a = 2; function foo() { // <-- 添加这一行 var a = 3; console.log( a ); // 3 } // <-- 以及这一行 foo(); // <-- 以及这一行 console.log( a ); // 2 虽然这种技术可以解决一些问题,但是它并不理想,因为会导致一些额外的…
Js中的函数声明是指下面的形式: function functionName(){   } 这样的方式来声明一个函数,而函数表达式则是类似表达式那样来声明一个函数,如 var functionName = function(){ } 可能很多朋友在看到这两一种写法时会产生疑惑,这两种写法差不多,在应用中貌似也都是可行的,那他们有什么差别呢? 事实上,js的解析器对函数声明与函数表达式并不是一视同仁地对待的.对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如…
作为一名js初学者,与大家分享下.Javascript中有函数声明提升的功能,会优先编译函数声明部分.比如, ff(); function ff(){ alert("hello world."); } 这样的代码一样会执行. 下面谈谈函数声明和函数表达式的区别,直接看实例: 1.使用函数声明的情况 <script type="text/javascript"> //使用函数声明的情况 //IE,Chrome下返回no, Firefox下返回yes ; i…
来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(七) 直接切入主题~ 定义函数的方式有两种: 函数声明 function functionName(arg0,arg1,arg2) { //函数体 } 函数声明有一个重要的特征——函数声明提升,意思是在执行代码之前会先读取函数声明,允许把函数声明放在调用它的语句后面 sayHi(); function sayHi() { alert("hi"); } 函数表达式 var fu…
// 下面2个括弧()都会立即执行 (function () { /* code */ } ()); // 推荐使用这个(function () { /* code */ })(); // 但是这个也是可以用的 和普通function执行的时候传参数一样,自执行的函数表达式也可以这么传参,因为闭包直接可以引用传入的这些参数,利用这些被lock住的传入参数,自执行函数表达式可以有效地保存状态. // 这个代码是错误的,因为变量i从来就没背locked住// 相反,当循环执行以后,我们在点击的时候i…
原文为 http://benalman.com/news/2010/11/immediately-invoked-function-expression/#iife ------------------------ES6拓展篇 ----------ES6  let实际上为 JavaScript 新增了块级作用域. ----------块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了. // IIFE 写法 (function () { var tmp = ...…
一.介绍 本次博客主要介绍函数表达式的内容,主要是闭包. 二.函数表达式 定义函数的两种方式:一个是函数声明,另一个就是函数表达式. //1.函数声明写法 function fn2(){ console.log('函数声明'); } //2.函数表达式写法 var fn1 = function(){ console.log('函数表达式'); } 区别: 1.函数声明是用function后面有函数名,函数表达式是赋值形式给一个变量. 2.函数声明可以提升函数,而函数表达式不会提升 函数提升就是函…
Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascript函数有的时候也比较“任性”,你如果不了解它的“性情”,它很可能给你制造出一些意想不到的麻烦(bugs)出来. Javascript Function有两种类型: 1)函数声明(Function Declaration); // 函数声明 function funDeclaration(type){…
在js中函数有两种表达方式.1 函数声明 2 函数表达式 函数声明 function sayname(){ alert("li lei"); } 函数表达式 var sayname=function(){ alert("lilei"); } 函数声明会进行函数提升,但是函数表达式不能. 函数提升比变量提升优先级要高. 这是一篇比较好的文章 --------------------- 作者:qq_30022055 来源:CSDN 原文:https://blog.csd…
hello,沐晴又来更新啦,今天呢,跟大家讲讲让人头疼的函数表达式和函数声明,反正我当初看那本高级程序的时候,是没怎么看太透,哈哈.我是个比较重基础的人,跟我一起探讨函数表达式和函数声明的世界吧. 首先呢,先看看他们的颜值:   函数声明:function 函数名(){} 函数表达式:function 函数名(可写可不写)(){}; (不写名叫做匿名函数表达式.写名叫做命名函数表达式.推荐用匿名的.) 这么一看长的好像没啥区别,反正颜值也都不高.那么我们如何区别是函数表达式还是函数声明呢?答案就…
相同点 注:函数声明和函数表达式的相同点包括但不限于以下几点 函数是一个值,所以和其他值一样,函数也可以进行被输出.被赋值.作为参数传给其他函数等相关操作,不管函数是以什么方式被定义的,当然和其他值的输出还是有些区别的. 我们先来输出这个值: function nameAlert(name){ alert('博主的名字是:' + name + ' .'); } alert(nameAlert); 注意输出的结果并不是1,而是这个函数的整个源代码,即输出结果为: function nameAler…