js和php中的作用域链的理解
2016-04-04 11:39
585 查看
其实很早就阅读过javascript权威指南,只是当时还是实习,读的似懂非懂的,现在在这里温故知新作用域链的知识
object(Demo)#1 (2) { ["name"]=> NULL ["age"]=> int(0) }#看到这一段php中用var_dump打印出来的对象结构了吗,对的,其实这就是一个树形结构,js中的作用域也是这种链子的结构;所以每次函数调用的时候函数内部变量的作用域链都是不一样的
function counter() { var n = 0; return { count: function() { return n++; }, reset: function() { n = 0; } } } var c = counter(), d = counter(); console.log(c.count());//0 console.log(d.count());//0 //console.log(c.reset()); console.log(c.count());//1 console.log(d.count());//1 console.log(c.count());//2 console.log(d.count());//2 #对象的属性在函数执行完之后并没有释放,所以在下一次调用的时候还累加了,相当于实现了私有的静态变量。这样来实现,其实也是js的苦啊。回头想想jquery整个就是一个闭包的设计
再来看看阮一峰举得几个例子 var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.getNameFunc()()); //The Window var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ var that = this; return function(){ return that.name; }; } }; alert(object.getNameFunc()());//My Object #需要注意的是this永远指向实例的应用,所以要看看确定this获取到的那个值得时候,应该看看实例是在什么作用域中执行的
#下面是一段php代码,在php中可以使用闭包来实现匿名函数啦 class Cart { const PRICE_BUTTER = 1.00; const PRICE_MILK = 3.00; const PRICE_EGGS = 6.95; protected $products = array(); public function add($product, $quantity) { $this->products[$product] = $quantity; } public function getQuantity($product) { return isset($this->products[$product]) ? $this->products[$product] : FALSE; } public function getTotal($tax) { $total = 0.00; $callback = function($quantity, $product) use ($tax, &total) { $pricePeritem = constant(__CLASS__ . "::PRICE_" . strtoupper($product)); $total += ($pricePeritem * $quantity) * ($tax + 1.0); } array_walk($this->products, $callback); return round($total, 2); } }
相关文章推荐
- 引入ping++的server SDK,thinkphp报错:unexpected 符号“,”
- PHP 的标注输入输出
- php strtotime 时间加减函数
- 蛇形矩阵,回环矩阵,数字螺旋矩阵的PHP实现
- php error_log()
- php之 i++ 和++i性能比较
- 如何在php中正确的使用json(转)
- PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
- 在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
- php文件上传的两种实现方法
- php自动加载方式集合
- PHP如何将XML转成数组
- PHP读取大文件的多种方法介绍
- php多维数组自定义排序 uasort()
- Thinkphp设置仅在调试模式关闭时显示404页面
- 生成多个不重复的随机数字php
- PHP中刷新输出缓冲
- PHP ORM操作MySQL数据库
- My study note of PHP language(V)
- 15 个实用的 PHP 正则表达式