JS学习笔记(三)函数
js中的方法名一般都是首字母小写,其余单词首字母大写的规范。
声明
function 函数名(参数列表) {
// 函数体
return 返回值;
}
调用
函数名();
(js中花括号喜欢用这种方式,因为在以前的浏览器中会在每行js代码的末尾添加分号,但现在的浏览器一般已经兼容这种写法,但仍保留这种习惯。)
需要注意的是只有在js的函数中声明的对象才具有块级作用域。函数中变量一定要定义,否则就是全局变量。
在解释js的时候,会先将其读入内存进行解释,再一步一步的从上到下的执行代码。js的函数也是变量值,即可以把函数赋值给变量。
function func1 () { // 代码体 } var myFunc; myFunc = func1; //直接使用myFunc代替func1 //或者 var func = function() { // 这是一个Lambda函数,也称为匿名函数 }; func();
如果函数中声明的变量名或函数名和对应全局的变量名或函数名一致,则会覆盖全局对象。
调试
js只能在浏览器中进行调试,如使在FireFox浏览器中安装firebug插件进行调试,而chorme可直接右键选项进行调试。
变量名提升和函数名提升
函数中的成员具有局部作用域,会出现变量名提升和函数名提升的问题。
如 var func = function(){
alert(i);
}
func();
程序执行时,先进入func()函数的函数体中,然后执行alert(i),此时会先在函数体内寻找变量i,因为找不到,所以跳到上一级作用域链中,由于函数定义代码之前还是没有变量i的定义,所以程序报错(i is undefined)。
但是如下情况
var func = function(){
alert(i);
var i = 456;
alert(i);
};
func();
程序不会报错,会先弹出undefined,再弹出456。
上面程序相当于
var func = function(){
var i;
alert(i);
var i = 456;
alert(i);
};
func();
所以不会报错。这就是变量名提升,函数名提升同理。
构造函数
在js中没有类的概念,但是有函数,函数可以作为构造函数来使用
使用方法
声明一个函数(构造函数) new 的方式创建对象,模拟类的样子进行创建
function Person(n, a, s) { // 如果需要为对象添加属性(字段) // 使用 this.属性名 = 值 this.name = n; this.age = a; this.sex = s; this.say = function() { alert("我是" + this.name); }; } // 当类来用 // 创建对象使用new 关键字 var p = new Person("杨洪波", 29, "女"); p.say(); alert(p.name); alert(p.sex); alert(p.age);
给对象动态的添加成员
var o = {};
o.say = function() {
alert("你好, 我是" + this.name);
};
o.say();
如果对象不具备这个属性,那么用对象去访问就会得到undefined。可以用来验证浏览器是否具备某个方法,写类库的时候,用来判断前面是否已经定义过这个方法,保证方法的可用。
删除对象成员
使用delete运算符
语法: boolean delete 属性或变量或数组成员;
如 delete o.say;
可以删除没有使用var声明的变量(所以变量的声明一定要加var关键字)
JS学习笔记(三)函数的更多相关文章
- JS学习笔记 (五) 函数进阶
1.函数基础 1.1 函数的基本概念 函数是一段JavaScript代码,只被定义一次,但是可以被调用或者执行许多次.函数是一种对象,可以设置属性,或调用方法. 函数中的参数分为实参和形参.其中,形参 ...
- JS学习笔记 (三) 对象进阶
1.JS对象 1.1 JS对象特征 1.JS对象是基本数据数据类型之一,是一种复合值,可以看成若干属性的集合. 属性是名值对的形式(key:value) 属性名是字符串,因此可以把对象看成是字符串到值 ...
- JS学习笔记3_函数表达式
1.函数表达式与函数声明的区别 函数声明有“提升”(hoisting)的特性,而函数表达式没有.也就是说,函数声明会在加载代码时被预先加载到context中,而函数表达式只有在执行表达式语句时才会被加 ...
- js学习笔记19----getElementsByClassName函数封装
js里面的getElementsByClassName()方法可通过某个class名获取到元素,在标准浏览器下可使用,在非标准浏览器下不可用.为了能够让这个方法兼容所有的浏览器,可以封装成如下函数: ...
- Node.js学习笔记(三) --- package.json 及cnpm
一.包 Nodejs 中除了它自己提供的核心模块外,我们可以自定义模块,也可以使用第三方的模块.Nodejs 中第三方模块由包组成,可以通过包来对一组具有相互依赖关系的模块进行统一管理. 完全符合 ...
- python学习笔记三 函数(基础篇)
函数 内置函数 常用的内建函数: type() 列出指定对象的类型 help() 能够提供详细的帮助信息 dir() 将对象的所有特性列出 vars() 列出当前模块的所有变量 file, ...
- 10-Node.js学习笔记-异步函数
异步函数 异步函数是异步编程语法的终极解决方案,它可以让我们将异步代码写成同步的形式,让代码不再有回调函数嵌套,是代码变得清晰明了 const fn = async()=>{} async fu ...
- Typescript 学习笔记三:函数
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- ES6学习笔记<三> 生成器函数与yield
为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...
- MYSQL学习笔记三:日期和时间函数
MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...
随机推荐
- 开源语音识别系统 Simon
http://www.lupaworld.com/proj.php?mod=view&cid=&id=824 语音识别系统 Simon:Simon 是一个开源的语音识别系统,它不仅可以 ...
- web本地存储-LocalStorage
LocalStorage是HTML5 提供的在客户端存储数据的方法.替代但不同于之前的globalStorage,规则作用范围事先已设定好,是同一个域名(子域无效),使用同一种协议,在同一个端口上.目 ...
- KO.js学习笔记(一)
1.官方网站:knockoutjs.com 2.要dom树加载完毕才能绑定数据 3.ui能实时更新,使用了ko的一个自定义属性:data-bind 4.可以对viewmodel中的属性添加subsci ...
- linux学习(二)-目录的操作命令
Linux命令大全:http://www.jb51.net/linux/ 目录分绝对路径和相对路径 : 绝对路径,在路径前会加 / 相对路径就是相对于当前的路径,直接 路径名即可. 查看目录: cd ...
- D. DZY Loves Modification
D. DZY Loves Modification time limit per test 2 seconds memory limit per test 256 megabytes input st ...
- OAuthBase.cs
using System; using System.Security.Cryptography; using System.Collections.Generic; using System.Tex ...
- 从头开始-02.C语言基础
变量的内存分析: #include <stdio.h> int main() { //内存地址由大到小 int a=10; int b=20; //&是一个地址运算符,取得变量的地 ...
- C# GridView弹出窗口新增行 删除行
<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="true" ...
- char* 和 wchar_t* 如何互相转换
char* 和 wchar_t* 如何互相转换 C函数可以用 wcstombs - 将宽字符转换成多字符 WCHAR -> CHAR mbstowcs - 把多字符把转换成宽字符 C ...
- 创建、更新、删除文档。 --- Mongodb权威指南阅读。
插入文档: db.foo.insert({ "key" : "value"}); 使用insert插入一个数据,文档中如果没有_id 会自动给文档增加_id. ...