这篇记录函数的用法
标准函数定义:
function sum(a, b) {
var c = a + b;
return c;
}
其中a和b叫做函数的参数,函数体内return c是将c作为返回值(如果没有显式的return,默认返回undefined),虽然函数只声明了两个参数,实际上调用的时候可以传入任意数量的参数,比如:sum(1,2,3,4,5),每个函数都会默认创建一个arguments变量,类似一个数组,可通过下标访问所有的参数
预定义的函数:
下面这些函数都是黑盒,无法查看内部实现代码
parseInt()
尝试把任意类型转换成整数,如果转换失败,返回NaN
一些示例:
parseInt('123') >>>123
parseInt('abc123') >>>NaN
parseInt('1abc23') >>>1
parseInt('123abc') >>>123
第二个参数表示进制
parseInt('FF', 10) >>>NaN
parseInt('FF', 16) >>>255 //十六进制
parseInt('0377', 10) >>>377
parseInt('0377', 8) >>>255 //八进制
对于0开头的字符串,parseInt会默认把它当成8进制转换,如:
parseInt('0377') >>>255
对于0x开头的字符串,parseInt会默认把它当成十六进制进行转换,如:
parseInt('0x377') >>>887
parseFloat()
尝试把参数转换成小数,只有1个参数,转换失败会返回NaN
区别:
parseInt("1.9")>>>1 parseFloat("1.9")>>>9
parseInt("1e2")>>>1 parseFloat("1e2")>>>100
parseFloat('1.23abc.00')>>>1.23
parseFloat('a.bc1.23') >>>NaN
isNaN()
判断参数是不是数字,如果不是数字,返回false,可以用来判断parseInt和parseFloat是否转换成功。
isNaN(NaN) >>>true
isNaN(123) >>>false
isNaN(1.23) >>>false
isNaN(parseInt('abc123')) >>>true
这个函数会尝试转换参数:
isNaN('1.23') >>>false
isNaN('a1.23') >>>true
isNaN('1px')>>>true //严格匹配,parseInt和parseFloat可以转换,但isNaN不认为它是个数字
因为NaN==NaN返回false,所以这个函数非常有用。
isFinite()
判断参数是一个数字,而不是Infinity或NaN
isFinite(Infinity) >>>false
与isNaN类似,它也会尝试转换字符串
isFinite("0") >>>true
encodeURI() /encodeURIComponent() ,decodeURI() /decodeURIComponent()
encodeURI会把参数当作一个完整的URI字符串处理
encodeURIComponent()会把参数当作URI的一部分,比如查询部分,所以所有的特殊字符都会被encode。
eval()
将参数当作一段javascript执行,不建议使用,会有性能和安全问题
变量作用域
在js中没有块作用域(不同于java),只有函数作用域和全局作用域
在函数内部定义的变量只有函数内或此函数的私有函数能访问,外部不能访问,如:
var global = 1;
function f() {
var local = 2;
global++;
return global;
}
global是全局的,在f内也可以访问,但是local是在f内定义的,不能被外部访问
注意,如果不小心丢掉了var关键字,local会被分配为全局变量
函数内的变量声明会覆盖全局声明:
var a = 123;
function f() {
alert(a); //undefined
var a = 1;
alert(a); //1
}
f();
函数也是数据(变量),两种定义方式:
function f(){return 1;} //函数声明
var f = function(){return 1;} //函数表达式
typeof f>>>"function"
完全可以把函数当作普通变量处理,让一个新变量指向它,当作参数传递,当作返回值,或者干脆delete f
匿名函数:
~function(a){alert(a)}(1);//定义一个匿名函数并马上执行它
私有函数
function a(param) {
function b(theinput) {
return theinput * 2;
};
return 'The result is ' + b(param);
};
其中b就是一个private function
或者用函数表达式的方式:
var a = function(param) {
var b = function(theinput) {
return theinput * 2;
};
return 'The result is ' + b(param);
};
综合应用,重写自己:
function a() {
alert('A!');
a = function(){
alert('B!');
};
}
只有第一次执行a时才会alert('A!'); 适合做一些只做一次的初始化工作
或者:
var a = function() {
function someSetup(){
var setup = 'done'; //马上会被执行,因为函数最后有一对小括号
}
function actualWork() {
alert('Worky-worky');
}
someSetup();
return actualWork;
}();
闭包
关于闭包的概念,网上有很多介绍的很多,在这不解释意义了,来几个例子,加深印象:
1、
function f(){
var b = "b";
return function(){
return b;
}
}
想在外部访问f的内部变量b,可以:
var n=f();
var b=n();
或者:
var n;
function f(){
var b = "b";
n = function(){ //n在外部声明
return b;
}
}
2、
function f(arg) {
var n = function(){
return arg;
};
arg++;
return n;
}
var m = f(123);
m();//结果是124
3、
function f() {
var a = [];
var i;
for(i = 0; i < 3; i++) {
a[i] = function(){
return i;
}
}
return a;
}
var a = f();
a[0]()=3,a[1]()=3,a[2]()=3
修正一下:
function f() {
var a = [];
var i;
for(i = 0; i < 3; i++) {
a[i] = (function(x){
return function(){
return x;
}
})(i);
}
return a;
}
var a = f();
a[0]()=0,a[1]()=1,a[2]()=2
或者:
function f() {
function makeClosure(x) {
return function(){
return x;
}
}
var a = [];
var i;
for(i = 0; i < 3; i++) {
a[i] = makeClosure(i);
}
return a;
}
相关推荐
黑马JavaScript笔记二.md
根据提供的文件信息,我们可以归纳出以下几个JavaScript相关的知识点: ### JavaScript基础用法 #### 内联JavaScript 内联JavaScript指的是在HTML元素中直接嵌入JavaScript代码的方式。这种方式常见于`<a>`、`...
【狂神说系列 JavaScript笔记】是一份全面且深入的JavaScript学习资源,旨在帮助开发者和初学者深入理解这门广泛应用于Web开发的脚本语言。这份笔记涵盖了JavaScript的基础语法、核心概念以及高级特性,旨在构建一个...
JavaScript,简称JS,是由Brendan Eich在1995年创造的一种高级编程语言,最初目的是为了增强网页的交互性,特别是在前端进行表单验证。JavaScript不是Java的子集,两者之间没有直接关联。JS起初名为LiveScript,但在...
javascript入门笔记包括javascript简介、javascript语法、javascript流程控制、函数、数组等
韩顺平Javascript笔记完整版.pdf ,配合视频看效果比较好
这个菜鸟的笔记里面没有谈到JavaScript中的对象,比如说时间对象和字符串对象,这些内容可以在“菜鸟的JavaScript对象笔记”中找到。不过因为小菜鸟个人认为HTML DOM比其它的JavaScript对象更常用一些(不过这可不...
"html+css+javascript笔记完整版"是一份全面的前端学习资源,涵盖了从基础到进阶的HTML、CSS和JavaScript知识。通过深入学习,你可以掌握创建交互式、响应式网页所需的所有技能,并为进一步探索前端开发的广阔领域...
个人Javascript学习笔记 精华版 本资源为个人Javascript学习笔记的精华版,涵盖了Javascript的基础知识、事件处理、对象和系统函数、浏览器对象等方面的内容。下面是对每个知识点的详细说明: 1. 什么是JavaScript...
《李炎恢Javascript笔记》是一本深入浅出的JavaScript学习资料,它涵盖了JavaScript的基础到实践应用的诸多方面。这本书的特点是将复杂的编程概念分解为易于理解的小知识点,并且提供了源码示例,使得读者能够更好地...
JavaScript笔记
`prompt()`函数用于显示一个对话框,提示用户进行输入,可以有两个参数,第一个是对话框中显示的纯文本,第二个是默认的输入文本。`alert()`函数用于弹出一个警告框,显示一条指定消息。`document.write()`函数用于...
这份笔记是对JavaScript基础知识的总结,内容丰富且覆盖了JavaScript编程的多个核心方面,适合初学者作为入门参考或对有经验的开发者作为复习材料。在实际使用JavaScript开发中,理解和掌握这些知识点是非常重要的,...
本笔记将深入探讨JavaScript的基本概念、脚本位置、外部引用以及Date对象的使用。 首先,理解JavaScript脚本在HTML文件中的放置位置至关重要。通常,JavaScript可以放在HTML文档的`<head>`或`<body>`部分。当脚本...
韩顺平老师的JavaScript笔记全面涵盖了基础语法、面向对象编程以及DOM编程,这些都是学习JavaScript时至关重要的知识点。 首先,基础语法是JavaScript学习的基石。包括变量声明(var、let、const)、数据类型(如...
这份"javascript笔记"可能是作者根据自己的学习和实践整理而成,对初学者来说是非常宝贵的资源。笔记中可能涵盖了变量声明、数据类型(如字符串、数字、布尔值、对象、数组等)、运算符、流程控制(如条件语句和循环...
第二天JavaScript笔记总结
这份“javascript学习笔记整理知识点整理”是针对初学者的一份宝贵资料,涵盖了JavaScript的基础知识,旨在帮助新手快速入门并掌握这门语言的核心概念。 一、变量与数据类型 在JavaScript中,变量用于存储数据。...
JavaScript笔记.chm