前言:很久没有写js代码了,为了提升自己对js的认识,编写高质量的js代码,最近在看JavaScript模式一书,结合自己的理解总结一些知识点。 一、深入理解JavaScript中的函数1、函数是(一等)对象函数可以通过内置构造函数来创建: var fn1 = function(){} var fn2 = new function(){}; // 在以上两行代码中,第二行代码更能体现出函数是一个对象.
var fn = function(){} fn.NUM = 100; console.log(fn.NUM); // 100 // 上面代码中,fn增加了一个NUM的属性,而只有对象才拥有属性,因此函数也是对象,其实函数默认就有一个prototype属性
function fn1 (callback) { // 执行脚本... // 执行回调函数 callback(); } function fn2 (callback) { // 执行脚本... // 返回回调函数 return callback; } 2、函数提供作用域在JavaScript中,代码语句块不提供作用域,只有函数才提供作用域,意思就是函数中声明的局部变量,不能在函数外部访问。 var add = function (a, b) { var c = 10; return a + b; }; var rt = add(2, 3); console.log(rt); // 5 console.log(c); // 试图访问函数局部变量c,结果undefined 3、总结对函数的理解,记住两句话:函数是一个对象,且提供作用域
二、函数模式1、回调函数回调函数这个较好理解,就是将一个函数作为参数传递给另外一个函数,我们就称这个传入的函数为回调函数 function fn1 (callback) { // 执行脚本... // 执行回调函数 callback(); } 2、即时函数(也称自执行匿名函数)即时函数的两种表达方式:
var fn1 = function fnName(){}; // 命名函数表达式 var fn2 = function(){}; // 匿名函数表达式 var fn3 = function(){}(); // 变量fn3指向一个函数返回值
函数执行就是在后面加一对括号,如:
var fn = function(){}; fn(); // 执行函数 function(){}(); // 理想情况下也可以这样写,但是js中没有这种写法,不能直接在函数声明的后面加上括号,这样写会报语法错误
var fn3 = function(){}(); // 正确 function(){}(); // 语法错误 // "function(){}()" 引号中的这种写法在表达式中不会出错,因此我们可以用一个括号包围它就可以了,JavaScript中的括号是执行的意思,它里面的代码作为表达式,并且优先执行; // 因此我们可以这样写: (function(){ }()); (function(){ })();
// 在JavaScript中,我们可以到处看到函数表达式的影子 // 函数作为参数传入另一个函数 function fnName (callback) { } // 函数赋值给一个对象属性 var obj = { method: function(){ }; }; // 事件侦听器listener,异步调用 target.addEventListener(type, listener, useCapture); // 超时调用 setTimeout(callback, delay);
三、未完待续深入理解JavaScript函数及其模式(二)
转载请注明出处:博客园,华子yjh
|
|
来自: 昵称15529048 > 《JavaScript》