脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-javascript数据结构和算法 第一章(编程体验)三,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。
变量作用域
变量作用域就是指在一个程序中,变量的值在哪里可以被获取到.javascript函数作用域被定义为函数作用域,这意味着变量的值在定义和声明该变量的函数,包括任何在该函数的嵌套函数里是可见的.
当一个变量定义在函数的外面,在主程序中,该变量将会拥有全局作用域.这就意味着它的值可以被程序的任何地方,包括函数获取.
下面的小程序演示全局变量时如何工作的.
function showScoPE() {
return scope;
}
VAR scope = "global";
PRint(scope); // 打印 "global"
print(showScope()); // 打印 "global"
函数showScope() 可以获取到变量scope,因为scope 是一个全局变量.
全局变量可以在程序的任何地方被定义.无论是在函数定义之前或者之后.
现在,让我们来看看当我们在函数scope中定义了另外一个scope变量时发生了什么.
function showScope() {
var scope = "local";
return scope;
}
var scope = "global";
print(scope); // 打印 "global"
print(showScope()); // 打印 "local"
在showScope函数中定义的变量scope拥有本地作用域.而在主程序中定义的scope具有全局作用域.即使它们的名字是相同的,但是它们的作用域是不同的,当在它们定义的区域获取它们的值也是不相同的.
所有这些行为都是正常并且是期望的.然而,如果你在变量定义的时候省略了关键字var,所有这些都将会改变.
javascript允许你不使用关键字var来定义变量,如果你这样做的话,这个变量将会自动拥有全局作用域,即使它是定义在函数中.
例子1-11 演示不使用关键字var定义变量带来的后果.
例子1-11 过度使用全局变量的结果.
function showScope() {
scope = "local";
return scope;
}
scope = "global";
print(scope); // 打印 "global"
print(showScope()); // 打印 "local"
print(scope); // 打印 "local"
在例子1-11中,因为在函数中的scope变量没有使用关键字var,当字符串”local”被指派给该变量,事实上我们改变了在主程序的中变量scope.你应该在每次定义变量的时候使用var关键字来避免这样的事情发生.
在之前,我们提到了javascript有函数作用域.这意味着javascript没有块作用域,不像其他现代编程语言,在有块作用域的情况下,你可以在一个块中声明一个变量,并且这个变量不会被块以外所访问.典型的如C++或者java的for循环.
for(int i=1; i<=10;++1){
count<<”hello world”< } 即使javascript没有块作用域,当我们写for循环的时候,我们假设它确实有. for(var i=1 ; i <=10; ++i){ print(“hello world”); } 递归 在javascript中,函数调用可以递归的被调用..在之前定义的函数factorial()函数可以被写成递归形式的. function factorial(number) { if (number == 1) { return number; }else { return number * factorial(number-1); } } print(factorial(5)); 当一个函数被递归的调用的时候,当递归正在继续的时候,计算的结果将会暂时被挂起(yield).为了说明它是如何工作的,这里有个图显示了当传递给factorial()参数5的时候如何工作 5 * factorial(4) 5 * 4 * factorial(3) 5 * 4 * 3 * factorial(2) 5 * 4 * 3 * 2 * factorial(1) 5 * 4 * 3 * 2 * 1 5 * 4 * 3 * 2 5 * 4 * 6 5 * 24 120 在本书中我们讨论的好几个算法都是使用递归,大多数情况下,javascript可以解决相当深的递归调用.(上面的是相对比较浅的递归调用.),但是在某些情况下,算法需要更深的递归以至于javascript无法解决的的时候,我们可以试试迭代算法. 你应该始终记住一点:任何使用递归的函数可以被迭代方式来进行重写. 对象和基于对象编程 在这本书中讨论的数据结构都是通过对象来实现的.javascript提供了许多创建和使用对象的方法.在这个模块,我们演示在这本书中使用的 创建对象和使用对象函数,属性的技巧. 对象通过定义一个声明对象属性和方法的构造函数,接着是函数的定义.下面是检验账号对象的构造函数. function Checking(amount) { this.balance = amount; // property this.deposIT = deposit; // function this.withdraw = withdraw; // function this.toString = toString; // function } this 关键字被用来将每个方法和属性连接到对象实例中,现在我们来看看函数定义. 我们需要再一次使用this关键字 来修改balance 属性以便于让解释器知道我们引用的是哪个对象的balance属性. 例子1-12 提供了完整的账号检查对象的定义,同时包括一个测试程序. function Checking(amount) { this.balance = amount; this.deposit = deposit; this.withdraw = withdraw; this.toString = toString; } function deposit(amount) { this.balance += amount; } function withdraw(amount) { if (amount <= this.balance) { this.balance -= amount; } if (amount > this.balance) { print("Insufficient funds"); } } function toString() { return "Balance: " + this.balance; } var account = new Checking(500); account.deposit(1000); print(account.toString()); // Balance: 1500 account.withdraw(750); print(account.toString()); // Balance: 750 account.withdraw(800); // displays "Insufficient funds" print(account.toString()); // Balance: 750 总结 这一章,我们预览了我们在整本书中使用javascript的方式. 我们尝试着遵循程序员熟悉的C风格(C++和java)的编程风格.当然,javascript有很多不遵循那些语言的约定.我们理所应当的将其指出并且展示了正确使用该语言的方法.我们同样尽可能的遵循了很多由其他作者指出的好的javascript编程体验.作为一个负责人的程序员,我们必须始终记住一点:我们的代码能被机器执行和被其他程序员看懂同样重要! 觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了! 以上是脚本宝典为你收集整理的javascript代码实例教程-javascript数据结构和算法 第一章(编程体验)三全部内容,希望文章能够帮你解决javascript代码实例教程-javascript数据结构和算法 第一章(编程体验)三所遇到的问题。
脚本宝典总结
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。