JavaScript基础-自己定义自己的函数

把一个函数对象赋值给变量后,就可以通过这个变量再次定义函数,甚至可以在一个函数内部再次定义它自己:

var scareMe = function () {
    alert("Boo!");
    scareMe = function () {
        alert("Double boo!");
    };
};
// using the self-defining function
scareMe(); // Boo!
scareMe(); // Double boo!

如果你需要在一个函数第一次执行的时候做一些特别的事情,就可以使用这种模式。但如果把这个变量赋值给另一个对象再执行,或是把它作为一个对象的方法执行,这种模式有可能会失效,考虑下面的代码:

// 1. adding a new property
scareMe.property = "properly";

// 2. assigning to a different name
var prank = scareMe;

// 3. using as a method
var spooky = {
    boo: scareMe
};

// calling with a new name
prank(); // "Boo!"
prank(); // "Boo!"
console.log(prank.property); // "properly"

// calling as a method
spooky.boo(); // "Boo!"
spooky.boo(); // "Boo!"
console.log(spooky.boo.property);  // "properly"

// using the self-defined function
scareMe(); // Double boo!
scareMe(); // Double boo!
console.log(scareMe.property); // undefined

这种模式的核心就是secareMe存放的是一个函数对象的引用,而这个引用在原来的函数对象中被修改。所以当这个函数对象的引用被赋值给另一个变量 prank时,就不能通过secareMe来修改parnk的引用,所以模式就失效了。这也体现了JavaScript里函数是一个对象的事实。

时间: 2024-10-14 12:33:57

JavaScript基础-自己定义自己的函数的相关文章

JavaScript基础之定义函数

javascript 字符串 字符串是由字符组成的数组,但在JavaScript中字符串是不可变的:可以访问字符串任意位置的文本,但是JavaScript并未提供修改已知字符串内容的方法 常见功能: obj.length                           长度   obj.trim()                           移除空白 obj.trimLeft() obj.trimRight) obj.charAt(n)                       

JavaScript基础5——关于ECMAscript的函数

ECMAScript的函数概述(一般定义到<head>标签之间) (1)定义函数,JavaScript一般有三种定义函数方法: *第一种是使用function语句定义函数(静态方法) 1 function 函数名(var1,var2,...,varX) 2 { 3 4 代码...(return) 5 6 } 第二种是使用Function()构造函数来定义函数(不常用) 1 var 函数名 = new Function(“参数1”,”参数2”,”参数3”……”函数体”); 2 如: 3 var

JavaScript基础:定义函数时用var和不用var的区别

首先看两种函数声明: var square1 = function (x){ return x*x; } function square2(x){ return x*x; } 两者看似不同,在大多数使用的时候也并无太大区别,但是第一种使用时有时会报错,如: var r1=square1(x); var r2=square2(x); var square1 = function (x){ return x*x; } function square2(x){ return x*x; } javasc

JavaScript基础知识(对象、函数与对象)

17.对象 属性:描述对象的信息  方法:描述对象的行为  封装:只关心输入和输出(不管过程如何实现) ü 对象的分类: 内置对象(原生对象): 就是JavaScript语言预定义的对象(如String/Number). 宿主对象: 一般由浏览器环境提供实现,主要分为 BOM 和 DOM. 自定义对象: 就是由开发人员自主创建的对象. ü 对象的创建: ? 初始化器方式 var 对象名 = {         属性名 : 属性值 ,         方法名 : function( ){方法体} 

javascript基础一语法和常用函数

1语法 1.1引入的方式 在html中引入javascript,使用script标签,在html页面中包括外部引入js方式和在html内部引入js方式.如下两种: 方式一: <script type="text/javascript">要写的javascript内容</script> 方式二: <script type="text/javascript" src="引入外部的js文件"></script&

JavaScript基础11——js的全局函数

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>js的全局函数</title> 6 <script type="text/javascript"> 7 // 由于不输入任何一个对象,所以可以直接写方法名使用 8 // eval(),执行js代码(如果字符串是一个js代码,使用方法直接执行) 9

【javaScript基础】立即调用函数表达式

在javaScript中,每个函数被调用时,都会创建一个新的执行上下文.因为在一个函数里面定义的变量和函数只能在里面访问,在外面是不行的,上下文提供了一种很容易的方法来创建私有性. //makeCounter函数返回另外一个匿名函数,这个匿名函数能够访问到"私有"变量i, 好像有一点"特权"性. function makeCounter() { // i只能在makeCounter的里面被访问到 var i = 0; return function() { cons

【javascript基础】2、函数

原文:[javascript基础]2.函数 前言 我在上一篇[javascript基础]基本概念中介绍了javascript的一些基本概念,多谢大家的阅读和意见,自己写的东西可以被大家阅读,真心高兴,刚开始发布的时候我一直盯着阅读人数,虽然知道大家可能就是点开一下而已,但是还是给我一些继续写下去的信心.那今天写一些关于javascript函数的一些知识,帮助大家熟悉或者复习一些函数的基本知识. PS:最近jQuery源码交流群( 239147101)加了不少热新人,希望大家还是以学习为主,尽量少

JavaScript基础——函数表达式、闭包

简介 函数表达式是JavaScript中的一个既强大又容易令人困惑的特性.定义函数的方式有两种:一种是函数声明,另一种就是函数表达式.函数声明的语法是这样的: function functionName(arg0 , arg1 , arg2--){ //函数体 } 首先是function关键字,然后是函数的名字,这就是指定函数名的方式.Firefox.Safari.Chrome和Opera都给函数定义了一个非标准的name属性,通过这个属性可以访问到给函数指定的名字.这个属性的值永远等于跟在fu