悟透javascript
JavaScript 函数只是一个命了名的变量而已,其变量类型即为function,变量的值就是我们编写的函数代码体。
原来,JavaScript 执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行的。在同一段程序的分析执行中:
1. var 型变量,无论是函数还是其它类型,都在预处理定义并赋值为undefined。
2.执行定义式的函数语句
3.函数定义执行完之后,按顺序执行其他语句代码。
<script type="text/javascript">
alert(i);
alert(j);
var i=0;
</script>
//
<html>
<head><script type="text/javascript">
function myfunc()
{
alert("hello");
};
myfunc(); // 第一次调用 myfunc,输出 yeah
function myfunc ()
{
alert("yeah");
};
myfunc(); // 第二次调用 myfunc,将输出 yeah
</script>
</head>
<body>
</body>
<html>
//
<html>
<head>
<script type="text/javascript">
myfunc=function ()
{
alert("hello");
};
myfunc(); // 第一次调用 myfunc,输出 hello
function myfunc ()
{
alert("yeah");
};
myfunc(); // 第二次调用 myfunc,将输出 hello
</script>
</head>
<body>
</body>
<html>
//
<html>
<head>
<script type="text/javascript">
function myfunc()
{
alert("hello");
};
myfunc(); // 第一次调用 myfunc,输出 yeah
function myfunc ()
{
alert("yeah");
};
myfunc(); // 第二次调用 myfunc,将输出 yeah
</script>
</head>
<body>
</body>
<html>
任何一个函数都可以为其动态地添加或去除属性,这些属性可以是简单类型,可以是对象,也可以是其他函数。也就是说,函数具
有对象的全部特征,你完全可以把函数当对象来用。其实,函数就是对象,只不过比一般的对象多了一个括号“()” 操作符,这个操作符
用来执行函数的逻辑。即,函数本身还可以被调用,一般对象却不可以被调用,除此之外完全相同。
object 和function的内部实现就是一个字典结构.
函数不但可以当作构造函数,而且还可以带参数,还可以为对象添加成员和方法。函数就是“ 类”.
方法的代码体(体现函数逻辑的数据)在每一个对象中都存在一个副本。尽管每一个代码副本的逻辑是相同的,但对象们确实是各自
保存了一份代码体。这也解释了JavaScript中的函数就是对象的概念。
JavaScript 的所有function类型的对象都有一个prototype 属性。这个prototype 属性本身又是一个object类型的对象,因此
我们也可以给这个prototype 对象添加任意的属性和方法。
我们已经知道,用 var anObject = new aFunction() 形式创建对象的过程实际上可以分为三步:第一步是建立一个新对象;第
二步将该对象内置的原型对象设置为构造函数prototype 引用的那个原型对象;第三步就是将该对象作为this 参数调用构造函数,完
成成员设置等初始化工作。对象建立之后,对象上的任何访问和操作都只与对象自身及其原型链上的那串对象有关,与构造函数再扯不
上关系了。换句话说,构造函数只是在创建对象时起到介绍原型对象和初始化对象两个作用。
几乎不能访问到对象内置的原型属性!尽管有些浏览器可以访问到对象的内置原型,但这样做的话就只能限定了用
户必须使用那种浏览器。这也几乎不可行。