函数与方法

  • 函数
    函数通过 function 关键词进行定义,其后是函数名和括号 ()。函数名可包含字母、数字、下划线和美元符号(规则与变量名相同)(在 JavaScript 中,函数是对象的方法,使用 call() 方法,您可以编写能够在不同对象上使用的方法,如果一个函数不是 JavaScript 对象的方法,那么它就是全局对象的函数)。

1,函数声明创建函数

// 使用函数声明创建函数function callName(){document.write("my name is ...");}callName()

使用上面的例子,callName 引用的是函数对象,而 callName() 引用的是函数结果。
局部变量
在 JavaScript 函数中声明的变量,会成为函数的局部变量;由于局部变量只能被其函数识别,因此可以在不同函数中使用相同名称的变量;局部变量在函数开始时创建,在函数完成时被删除。
2,函数表达式创建函数

// 创建匿名函数,将这个值赋值给函数对象(使用函数表达式创建)var fun1 = function(){console.log("niming");};fun1();

这是赋值语句,最后面最好加上分号
函数的用处:您能够对代码进行复用:只要定义一次代码,就可以多次使用它。您能够多次向同一函数传递不同的参数,以产生不同的结果。在调用函数时把实参传入形参,若没有实参传入,形参就是undefined。
如果函数调用的参数太多(超过声明),则可以使用 arguments 对象来达到这些参数
3,Function内建函数

// 通过Function()的内建JavaScript函数构造器来定义函数var fun2=new Function('a','b','return a+b');var x=fun2(2,3);alert(x);

4,声明提前
*Hoisting 是 JavaScript 将声明移动到当前作用域顶端的默认行为。Hoisting 应用于变量声明和函数声明。正因如此,JavaScript 函数能够在声明之前被调用:alert(fun3(2,3)); function fun3(a,b){ return a+b; }

*
5,自调用函数
函数表达式可以作为“自调用.自调用表达式是自动被调用(开始)的,在不进行调用的情况下。函数表达式会自动执行,假如表达式后面跟着 ()。您无法对函数声明进行自调用。您需要在函数周围添加括号,以指示它是一个函数表达式:

(function fun4(){alert("世界很美好")}());

6,特殊函数

箭头函数(ES6)
箭头函数允许使用简短的语法来编写函数表达式
不需要 function 关键字、return 关键字和花括号。箭头函数没有自己的 this。它们不适合定义对象方法。箭头函数未被提升。它们必须在使用前进行定义。
// 箭头函数 var fun5=(a,b)=>a+b; alert(fun5(2,3))
使用 const 比使用 var 更安全,因为函数表达式始终是常量值。如果函数是单个语句,则只能省略 return 关键字和大括号。

构造函数(与普通函数不同是构造函数要添加new来调用)
使用同一个构造函数创建的对象,称为一类对象,将一个构造函数称为一个类,通过一个构造函数创建的对象称为该类的实例。(使用instanceof判断是否实例属于某一个类。)
创建流程:
1,创建一个新的对象
2,将新建对象设置为函数中的this,逐行执行函数中代码
3,将新建对象作为返回值返回

function Upstair(shu){console.log("预备下"+shu+"楼")
};
var up=new Upstair("三");

prototype
在创建一个函数时都会有一个属性prototype(显式原型),默认指向一个object空对象(原型对象)。(但object不满足 例如Object.prototype instanceof Object//false)原型对象可以不会污染全局作用域的命名空间。实例对象是__proto__(隐式原型)来访问属性。
在对象访问属性时的路线(隐式原型链):对象自身(可以使用hasOwnProperty检查是否含有属性)——>原型对象(使用in查找,但是in先查找自身在原型对象。tips:原型对象也是对象,原型对象中没有可以去原型对象的原型中找,直到找到object对象的原型,若没有则返回unidentified)
constructor
原型对象中有一个constructor属性,它指向函数对象举例:fun1.prototype.constructor===fun1;
所有函数都是Function的实例包括Function
方法一般定义在原型中,属性一般通过构造函数定义在对象本身上
在设置对象属性值时不会查找原型链,若对象中没有此属性直接添加并设置

7,call和apply方法
相同:将另一个对象作为参数调用对象方法

var All={allcity:function(){return this.firstcity+" "+this.lastcity; # this引用city对象的firstcity属性}
}
var city={firstcity:"lundun",lastcity:"beijing",
}
All.allcity.call(city)

javaScript this 关键词指的是它所属的对象。
它拥有不同的值,具体取决于它的使用位置:
在方法中,this 指的是所有者对象。
单独的情况下,this 指的是全局对象。
在函数中,this 指的是全局对象。
函数中,严格模式下,this 是 undefined。
在事件中,this 指的是接收事件的元素。
像 call() 和 apply() 这样的方法可以将 this 引用到任何对象

不同:call() 方法分别接受参数fun1.call(fun2,'','');apply() 方法接受数组形式的参数fun1.call(fun2,[]);,严格模式下,如果 apply() 方法的第一个参数不是对象,则它将成为被调用函数的所有者(对象)。在“非严格”模式下,它成为全局对象。

8,闭包
怎么产生闭包:被嵌套的内部函数引用外部函数的数据,从这里可以看出闭包产生的条件是函数必须得嵌套和内部的函数必须要引用外部函数的变量或者函数。
闭包优点:1,延长局部变量的生命周期;2,外部可以操作内部函数的变量(利用这一特点,自定义js模块时,可调用)。
闭包缺点:1,生命周期长,占内存;2,占用内存没有及时释放或回收,造成内存泄漏,内存泄漏积累多了就会导致内存溢出。
闭包是哪个部分:嵌套的内部函数

#常见的闭包之一
function fun1(){var a=0;function fun2(){a++;console.log(a);}return fun2;
};
var f=fun1();
f();
f();
  • 方法
    本质上和调用函数无区别,只是名称上的区别,方法是调用对象中的函数(this调用在函数中就是window,在方法中就是调用方法的对象)。
    在 DOM 中,所有HTML元素都是对象,属性是能够改变HTML元素的值,比如字体的大小;方法则是改变属性的动作,比如将字体大小从一号变为二号。

JavaScript学习二相关推荐

  1. JavaScript学习(二)动画

    Offset offsetWidth和offsetHight 检测盒子自身宽高+padding+border. 这两个属性,他们绑定在了所有的节点元素上.获取之后,只要调用这两个属性,我们就能够获取元 ...

  2. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

  3. 【经典回放】JavaScript学习详细干货笔记之(二)

    [经典回放]JavaScript学习详细干货笔记之(一) [经典回放]JavaScript学习详细干货笔记之(二) [经典回放]JavaScript学习详细干货笔记之(三) 一.JavaScript ...

  4. JavaScript学习(九十二)—关联数组的基本操作

    JavaScript学习(九十二)-关联数组的基本操作 王同学的每天进步一点点系列!!! 一.关联数组的定义 定义:所谓关联数组,就是指数组元素的下标为字符型 二.关联数组的创建方式 1)定义一个空数 ...

  5. JavaScript学习(九十一)—二维数组的基本操作

    JavaScript学习(九十一)-二维数组和多维数组总结 王同学的每天进步一点点系列!!! (一).二维数组的定义格式 var 数组名称=[[值1,值2,值3],[值1,值2,值3],[值1,值2, ...

  6. JavaScript学习(八十二)—JavaScript的组成

    JavaScript学习(八十二)-JavaScript的组成 一.ECMAScript ECMAScript是由ECMA国际(原欧洲计算机制造商协会)进行标准化的一门编程语言,这种语言在万维网上应用 ...

  7. JavaScript学习(七十二)—严格模式

    JavaScript学习(七十二)-严格模式 JavaScript除了提供正常模式外,还提供了严格模式,ES5的严格模式是采用具有限制性JavaScript变体的一种方式,即在严格条件下运行JS代码, ...

  8. JavaScript学习(六十二)—解析选项和序列化选项

    JavaScript学习(六十二)-解析选项和序列化选项 一.解析选项 格式:JSON.parse(参数1,参数2); 参数说明 参数1:表示要转换为JS对象的json字符串 参数2:表示将json转 ...

  9. JavaScript学习(五十二)—继承、call方法和apply方法

    JavaScript学习(五十二)-继承.call方法和apply方法 学习内容 一.继承 二.call方法 三.apply方法 一.继承 所谓继承就是两个构造方法建立起来的某种联系,通过某种联系,可 ...

最新文章

  1. 最新SOTA模型和实现代码
  2. 【文本分类】深入理解embedding层的模型、结构与文本表示
  3. 里程碑:BCH网络出现首例Schnorr Multisig交易
  4. Android-----application的学习
  5. 阻止计算机访问注册表,电脑怎么样防止注册表被强行的篡改,保护电脑安全
  6. python functools import wraps_python装饰器中functools.wraps的作用详解
  7. html5如何划分区域,10.4 51单片机 RAM 区域的划分
  8. python web开发-flask访问请求数据request
  9. 使用servlet+jdbc+MD5实现用户加密登录
  10. ASP.NET【1】
  11. (宇哥云端)互联网+
  12. GIS专业书籍、文档、数据、网站、工具等干货
  13. 碎片(Fragments)
  14. infer的用法_infer使用的浅谈简析
  15. 2016年上半年信息系统监理师考试感想
  16. 根据原厂uboot进行移植
  17. python编码格式 兼容中文_python中文编码(汉字乱码问题解决方案)
  18. 《静态时序分析实用方法》翻译
  19. 计算机练打字最难的一段话,电脑盲打字一般练多久 你用多久练会了盲打?
  20. MapReduce理解-深入理解MapReduce

热门文章

  1. 如何测算BMI指数(Python)
  2. python怎么实现打开摄像头_python开启摄像头以及深度学习实现目标检测方法
  3. 利用html 和css模仿必应搜索主页。(一)
  4. MessageBox英文显示OK/Cancel(适用于中英文界面)
  5. 考研数学汤家凤笔记第一章:极限与连续
  6. Unity的gamma矫正、颜色空间及其转换的问题
  7. SpringCloud Gateway 重试路由器的过滤器
  8. 感悟 | 电影《你的名字》
  9. Linux监控利器nagios–NSCA被动监控
  10. 微信小程序如何进行推广?