I’ve faced with the similar question before. I think it relates to calling scope such that when you call runAction() you use “sprite” to call it, so the parameter passed in are in the realm or scope that “sprite” knows. And because runAction() is attached to that “sprite” so you still have access to the parent owner of that action (I don’t look into the cocos2d-html5 code, but this is what I believe it will be in terms of programming language and its behavior).
I once tried to pass in a different variable such that (for example)
sprite.runAction(cc.CallFunc.create(this, this.fade, anotherSprite);
Whenever you do like that, you lost “anotherSprite” and it will be null in the function receiving the call. If it’s not the “sprite” itself, or primitive data type passing in, it will be null. I’m not sure about this behavior whether it’s a limitation on JS language or it should be that way though.